|
■
プロセス監視をするシェルスクリプト
無限ループする 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`
|
|