定期的な起動チェックはcron、起動チェック自体はシェルスクリプト。まずはターゲットとなるコマンドを書いたシェルスクリプトが以下。1時間の平均を取って出力するvmstatコマンド。
$ cat vmstat.sh nohup nice vmstat -n 3600 >> vmstat_.dat
これを呼び出すシェルスクリプト。起動チェックを行い、起動している場合は何もしない。起動していない場合は起動する。第一引数に適当な文字列。第二引数に先のシェルスクリプト。この中ではドットコマンド(sourceコマンド)でこれを読み込む。
$ cat double_run_check.sh sem="/tmp/$1" ln -s /dummy $sem || exit trap "rm $sem; exit" 2 3 15 source $2 rm "$sem" exit
起動テスト。2行目からが1時間の平均。大丈夫みたい。
$ sh double_run_check.sh vmstatcheck vmstat.sh procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 6 0 0 46720 257912 377008 0 0 0 0 1 1 97 0 3 0 4 0 0 44924 257960 377044 0 0 0 12 31 679 99 1 0 0 4 0 0 42076 259916 378100 0 0 0 18 38 566 99 1 0 0 5 0 0 36716 262120 378220 0 0 0 23 46 528 99 1 0 0
出来たスクリプトをcronに仕込む。終わらないプログラムを読んでいるので、cronから呼び出されたシェルはすぐに終了してくれた方が嬉しい。そのために標準出力と標準エラー出力を閉じて、バックグラウンド起動にしておく。
$ crontab -l 0 * * * * sh double_run_check.sh vmstatcheck vmstat.sh > /dev/null 2>&1 &