
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
batである文字列内に特定の文字...
-
ファイルから文字列を読み込む...
-
スクリプトのエラー「unexpecte...
-
Linuxコマンドは何の言語で書か...
-
UNIX コマンドにおける # や円...
-
IPアドレスだとPingが通るのに...
-
SONYの音楽ソフト「x-アプリ」...
-
pingは正常なのにtracerouteで...
-
ファイル名一覧の印刷
-
batファイルの強制終了を回避し...
-
Linux環境 grepで改行コード(CR...
-
Linux 月を英語表示したい
-
TOPコマンドで表示するCPU使用...
-
Linux のシェルスクリプトの強...
-
net use /d の強制実行
-
ファイル名についている「-」と...
-
エクセルの表にヘンな枠が・・・
-
Linux:sedコマンドで置換がし...
-
Docker環境は以下通りです。doc...
-
bashでシングルクォート内の変...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
batである文字列内に特定の文字...
-
if文について
-
スクリプト中のexportコマンド...
-
シェルスクリプトの変数の制限?
-
Bシェル 文字列に含まれる特...
-
bashスクリプト
-
【シェルスクリプト】whileルー...
-
【sh】tee コマンドの代替方法
-
Cシェルプログラムで、あるディ...
-
UWSCについて
-
rubyで、バッククォートの中に...
-
cshの条件式について教えてくだ...
-
kshでのNULLの比較
-
シェルスクリプトのパス
-
シェルスクリプトでうるう年判定
-
ログインシェル時のSHELL環境変数
-
Cシェルで標準エラー出力への...
-
shellスクリプトから別のshell...
-
Cシェルにあるコマンドの代わり
-
exprで四則演算をする際に変数...
おすすめ情報