
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である文字列内に特定の文字...
-
SONYの音楽ソフト「x-アプリ」...
-
Dirコマンドでフォルダ内ファイ...
-
LinuxでDVD-RWの初期化
-
ファイル名についている「-」と...
-
UNIX コマンドにおける # や円...
-
SCコマンドでアクセス拒否
-
Linuxコマンドは何の言語で書か...
-
ラズパイで『’test.service’をs...
-
vbaで「最前面に」とする方法は?
-
常に全画面表示するには・・・
-
shutdownコマンドをキャンセル...
-
echo $!の意味を教えてください
-
コマンドプロンプトにおけるコ...
-
コマンドプロンプトから別マシ...
-
Linuxでコマンドが終了しない
-
SPI非言語の問題 解説お願いします
-
[バッチファイル]レジストリ値...
-
タスクバーの音量アイコンをク...
-
windows10を使っています。 wsl...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
batである文字列内に特定の文字...
-
シェルスクリプトの変数の制限?
-
スクリプト中のexportコマンド...
-
shellスクリプトから別のshell...
-
if文について
-
bash 条件式について
-
bashスクリプト
-
Bシェル 文字列に含まれる特...
-
【sh】tee コマンドの代替方法
-
【シェルスクリプト】whileルー...
-
cshの条件式について教えてくだ...
-
UWSCについて
-
Cシェルで標準エラー出力への...
-
シェルスクリプトで
-
shellで$入り変数に値を代入す...
-
awk スクリプト内で、関数の出...
-
シェルからのストアド起動
-
ファイルから文字列を読み込む...
-
文字列の一部を取り除きたい(...
-
Cシェルにあるコマンドの代わり
おすすめ情報