dポイントプレゼントキャンペーン実施中!

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と出力されるように
してますが、何もログを残さずメールも送らないように
したいのです。どなた様か教えてくださいませ!

A 回答 (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を越えたら」という条件が意味があるのか疑問です。ロードアベレージの意味をおわかりですか?

この回答への補足

すいません。話がそれたようなので、別で質問させてもらいます。
情報提供ありがとうございました。

補足日時:2009/08/02 05:54
    • good
    • 0
この回答へのお礼

スクリプトに関してはこれが始めてのチャレンジとなり、
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

$AVEが0.5以下なら、プログラムを即終了させる(exit 1とか)。


即終了させれば、メールも送らないし、ログも残さないかと。
    • good
    • 0
この回答へのお礼

exit 1とうい即終了させるのもあるんですねっ
勉強になります。どこかで使わせてもらいますね
ありがとうございましたっ

お礼日時:2009/08/01 05:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!