• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:load averageが0.50を超えた時だけメール送信)

LINUXでtopコマンドのロードアベレージが0.50を超えた時にメール送信するスクリプト

このQ&Aのポイント
  • LINUXのtopコマンドを使用して、ロードアベレージが0.50を超えた場合にメールを送信するスクリプトを作成しています。
  • スクリプトでは、topコマンドの出力からロードアベレージを取得し、0.50を超えているか判定します。
  • 超えている場合は、top.logファイルにシステムの情報を記録し、メールを送信します。超えていない場合は何も処理しません。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答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を越えたら」という条件が意味があるのか疑問です。ロードアベレージの意味をおわかりですか?

r-linux
質問者

お礼

スクリプトに関してはこれが始めてのチャレンジとなり、 1週間前からネットで調べ始めて拾い集めてるので、 基本を全く知りませんでした。 コンマも消して整数値にすることは気付きませんでしたおかげさまで 条件を満たした時のみメールしてそうでないときは何もしない。 というスクリプトを作ることができましたっ ありがとうございます。 ロードアベレージの意味は1を超えたら処理が重くなる。 という単純な捕らえ方をしています。今はテスト段階なので、 条件を満たしやすくしています。本番では5分の平均が1を超えたら 処理をするくらいにしようと思ってます。 もとはtopコマンドのSHIFT + Mでメモリ順になった情報を メールしたかったのですが、普通にtopコマンドからメモリ順にするのは 簡単なのですが、スクリプトの中で同じ状況にするには。。。 top echo M とか top < M(Mだけ書いたファイル) とかいろいろtopの後にMを押すようにしたくともわからず、 とりあえずtopのアベレージとpsからメモリ順の情報を抜き出そう。 と思い、topに固執していました。というかuptimeもまだ2回くらいしか 使ったことがなかったので、思いつかなかったです。 ちなみにどうしたらtopコマンド後にメモリ順にできるか 教えてもらえませんでしょうか。。。

r-linux
質問者

補足

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

その他の回答 (1)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

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

r-linux
質問者

お礼

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

関連するQ&A