• ベストアンサー
  • すぐに回答を!

load averageが0.50を超えた時だけメール送信

  • 質問No.5169533
  • 閲覧数233
  • ありがとう数2
  • 回答数2

お礼率 93% (42/45)

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
  • ベストアンサー

ベストアンサー率 47% (4574/9575)

これだと常に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を越えたら」という条件が意味があるのか疑問です。ロードアベレージの意味をおわかりですか?
補足コメント
r-linux

お礼率 93% (42/45)

すいません。話がそれたようなので、別で質問させてもらいます。
情報提供ありがとうございました。
投稿日時:2009/08/02 05:54
お礼コメント
r-linux

お礼率 93% (42/45)

スクリプトに関してはこれが始めてのチャレンジとなり、
1週間前からネットで調べ始めて拾い集めてるので、
基本を全く知りませんでした。

コンマも消して整数値にすることは気付きませんでしたおかげさまで
条件を満たした時のみメールしてそうでないときは何もしない。
というスクリプトを作ることができましたっ
ありがとうございます。

ロードアベレージの意味は1を超えたら処理が重くなる。
という単純な捕らえ方をしています。今はテスト段階なので、
条件を満たしやすくしています。本番では5分の平均が1を超えたら
処理をするくらいにしようと思ってます。

もとはtopコマンドのSHIFT + Mでメモリ順になった情報を
メールしたかったのですが、普通にtopコマンドからメモリ順にするのは
簡単なのですが、スクリプトの中で同じ状況にするには。。。
top
echo M
とか
top < M(Mだけ書いたファイル)
とかいろいろtopの後にMを押すようにしたくともわからず、
とりあえずtopのアベレージとpsからメモリ順の情報を抜き出そう。
と思い、topに固執していました。というかuptimeもまだ2回くらいしか
使ったことがなかったので、思いつかなかったです。

ちなみにどうしたらtopコマンド後にメモリ順にできるか
教えてもらえませんでしょうか。。。
投稿日時:2009/08/01 05:45

その他の回答 (全1件)

  • 回答No.1

ベストアンサー率 42% (1231/2878)

$AVEが0.5以下なら、プログラムを即終了させる(exit 1とか)。
即終了させれば、メールも送らないし、ログも残さないかと。
お礼コメント
r-linux

お礼率 93% (42/45)

exit 1とうい即終了させるのもあるんですねっ
勉強になります。どこかで使わせてもらいますね
ありがとうございましたっ
投稿日時:2009/08/01 05:00
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ページ先頭へ