LINUXでtopコマンドのロードアベレージが0.50を超えた時に
top.logファイルに内容を記述してさらにメールを送る。
0.50を超えない場合には何も残さないというスクリプトを
作りたいのですが、うまくいきません。
ifの書き方などが悪いのでしょうか
#!/bin/sh
AVE=`top -b -n1 |sed 'y/,/ /' |awk '{if(1>=NR){print $(NF-2)}}'`
if [ $AVE > 0.50 ]; then
echo ----------------------------------------------------------------------------- >> ./top.log
top -b -n1 |awk '{if(5>=NR){print}}' >> ./top.log
echo ----------------------------------------------------------------------------- >> ./top.log
printf "USER PID %%CPU %%MEM VSZ RSS TTY STAT START TIME COMMAND\n" >> ./top.log
ps aux |sort +4r |head -10 >> top.log
echo ----------------------------------------------------------------------------- >> ./top.log
echo ----------------------------------------------------------------------------- >> ./top.log
mail -s load_average root < top.log
else
echo ok
fi
今はとりあえず0.50を超えない時はOKと出力されるように
してますが、何もログを残さずメールも送らないように
したいのです。どなた様か教えてくださいませ!
No.2ベストアンサー
- 回答日時:
これだと常にifの条件が成立しますね。
大小比較は、> じゃなくて -gt です。> はリダイレクトなので、0.50 という名前のファイルができていると思います。
ただ、整数値としてしか比較できないので、[ $AVE -gt 0.50 ] はできません。ピリオドも削除しておいて、[ $AVE -gt 50 ] かな。
あと、ロードアベレージを取りたいなら普通はuptimeです。
AVE=`uptime | sed 's/[.,]//g' | awk '{print $(NF-2)}'`
if [ $AVE -gt 50]
>0.50を超えない場合には何も残さないというスクリプトを
else echo OK を削除すればいいだけですが、これは自分で作ったスクリプトじゃない?
そもそも、「1分のロードアベレージが0.5を越えたら」という条件が意味があるのか疑問です。ロードアベレージの意味をおわかりですか?
スクリプトに関してはこれが始めてのチャレンジとなり、
1週間前からネットで調べ始めて拾い集めてるので、
基本を全く知りませんでした。
コンマも消して整数値にすることは気付きませんでしたおかげさまで
条件を満たした時のみメールしてそうでないときは何もしない。
というスクリプトを作ることができましたっ
ありがとうございます。
ロードアベレージの意味は1を超えたら処理が重くなる。
という単純な捕らえ方をしています。今はテスト段階なので、
条件を満たしやすくしています。本番では5分の平均が1を超えたら
処理をするくらいにしようと思ってます。
もとはtopコマンドのSHIFT + Mでメモリ順になった情報を
メールしたかったのですが、普通にtopコマンドからメモリ順にするのは
簡単なのですが、スクリプトの中で同じ状況にするには。。。
top
echo M
とか
top < M(Mだけ書いたファイル)
とかいろいろtopの後にMを押すようにしたくともわからず、
とりあえずtopのアベレージとpsからメモリ順の情報を抜き出そう。
と思い、topに固執していました。というかuptimeもまだ2回くらいしか
使ったことがなかったので、思いつかなかったです。
ちなみにどうしたらtopコマンド後にメモリ順にできるか
教えてもらえませんでしょうか。。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript JavascriptからSQLへ繋ぎ方が分からない 3 2022/07/07 00:27
- JavaScript console.logがどうしても2つ機能しないのでアドバイスをくださいお願いします 2 2022/07/07 22:13
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- 数学 作図について 写真の垂線の作図についてで、 ②の半径opの円を書くと書いてありますが、opにしなくて 6 2023/01/07 01:57
- その他(プログラミング・Web制作) 単純なコマンドプロンプトが動きません。 2 2022/04/19 15:21
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- 数学 log底10真数1/75 ただし、 log底10真数2=0.3 log底10真数3=0.5とする 式 2 2022/05/30 22:51
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- UNIX・Linux 次の要件を満たすにはどのように修正したらよろしいでしょうか 1 2022/11/24 20:57
- MySQL php テーブルを作れない 2 2022/11/17 18:22
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
batである文字列内に特定の文字...
-
shellスクリプトから別のshell...
-
if文について
-
【シェルスクリプト】 for文で...
-
【sh】tee コマンドの代替方法
-
シェルスクリプトの変数の制限?
-
Bシェル 文字列に含まれる特...
-
スクリプト中のexportコマンド...
-
Dirコマンドでフォルダ内ファイ...
-
TOPコマンドで表示するCPU使用...
-
スクリプトのエラー「unexpecte...
-
UNIX コマンドにおける # や円...
-
Linux環境 grepで改行コード(CR...
-
エクセルの表にヘンな枠が・・・
-
pingは正常なのにtracerouteで...
-
SCコマンドでアクセス拒否
-
bashでシングルクォート内の変...
-
テキストファイルから最終行の抽出
-
ラズパイで『’test.service’をs...
-
<自分が所有者のファイルの所...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
batである文字列内に特定の文字...
-
スクリプト中のexportコマンド...
-
平均値の算出
-
bashスクリプト
-
ファイルから文字列を読み込む...
-
シェルスクリプトの変数の制限?
-
kshでのNULLの比較
-
Bシェル 文字列に含まれる特...
-
【シェルスクリプト】whileルー...
-
if文について
-
shellスクリプトから別のshell...
-
【sh】tee コマンドの代替方法
-
UWSCについて
-
sh スクリプト ipアドレス形式...
-
ログインシェル時のSHELL環境変数
-
Cシェルプログラムで、あるディ...
-
【シェルスクリプト】 ローカル...
-
シェルで and/or の優先順位に...
-
シェルスクリプトでうるう年判定
-
load averageが0.50を超えた時...
おすすめ情報