綾小路龍之介の素人思考

[linux] 終了しないプログラムを定期的に起動チェックして起動する。

例えば、vmstat 60とした場合これは終了しない。これが定期的に起動されているかどうかチェックして、起動していない場合は起動。起動している場合は何もしないそんなことがしたい。

定期的な起動チェックは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 &

リファレンス

  1. Manpage of VMSTAT
  2. vmstat 平均 - Google 検索
  3. シェルスクリプトで正しい二重起動チェックを解説しているページ、もしくは方法を教えてください。 - 人力検索はてな
  4. 多重起動を禁止するシェルスクリプト
  5. "二重起動"|"多重起動"|"2重起動" |"排他処理" シェルスクリプト - Google 検索
  6. Debian(etch) に関する覚書
  7. defunct cron - Google 検索
  8. sourceコマンド (ピリオド)
  9. シェルスクリプト . ピリオド - Google 検索

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2009-05-15T18:34:11+09:00
  2. Modified: 2009-05-15T18:34:11+09:00
  3. Generated: 2017-10-07T23:09:17+09:00