シェルスクリプト リファレンス & Tips  
トップ > サンプル & Tips > プロセス監視をするシェルスクリプト


→ 基本的な文法
→ サンプル & Tips
→ リンク集
プロセス監視をするシェルスクリプト

無限ループする while文を使って、ほかのプロセスを監視するシェルスクリプトです。



ファイル名 : samp02.sh
01: #!/usr/bin/sh
02: while true
03: do
04:    isAlive=`ps -ef | grep " ftpd " | \
05:           grep -v grep | wc -l`
06:    if [ $isAlive = 1 ]; then
07:       echo "プロセスは生きています"
08:    else
09:       echo "プロセスは死んでいます"
10:    fi
11:    sleep 3
12: done

while文の条件に true を入れて無限ループとしています。4行目でプロセスが生きているかの判定条件となる変数に値を入れています。

プロセスの生死判定

ps -ef | grep " プロセス名 " | grep -v grep | wc -l

「ps -ef」のプロセス状況出力を「プロセス名が含まれ、grep が含まれない」行の行数を返します。
コマンドの結果はプロセスが生きていれば 1 が返り、そうでなければ 0 が返ることになります。

11行目の sleep でプロセス生死監視に間隔を取っています。

このスクリプトの実行結果は以下のようになります。

1: $ chmod u+x samp02.sh
2: $ samp02.sh
3: プロセスは生きています
4: プロセスは生きています
5: プロセスは生きています
...

これはサンプルのためプロセスが落ちていた場合の処理をとくに入れていませんが、ここにプロセスを起動するコマンドを入れれば、プロセスが何らかの原因で落ちた場合に自動的に起動されます。

また、このスクリプトは無限ループしているので自動的には終了してくれません。終了するには、フォアグラウンドで起動した場合には Ctrl + c で、バックグラウンドで起動した場合には、以下のようにして、起動したシェルの PID を kill して終了します。

1: $ ps -ef | grep " samp02.sh " | \
   grep -v grep
2:     root 42980 39204  ...  sh samp02.sh
            -----
          ↑これがPID
3: kill `PID`




お知らせ : このページへのリンク、雑誌等への紹介はすべて自由に行って結構です。 逆に、これらの許可申請のメールをいただいてもご返答はいたしません。ご了承ください。

注意 : Internet Explorer 4 以降のブラウザ のみ に対応しています。Netscapeでの表示確認は一切していません。ご了承ください。

このサイト及びページに関するお問い合わせは shell@rhythm-cafe.ocm までお願いします。



(C) 2001 rhythm-cafe.com All rights reserved.