- 履歴一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- 障害メモ/cronからキックすると多重起動判定ミスする へ行く。
- 1 (2016-08-30 (火) 04:20:12)
キーワード†
- bash
- プロセスID
- cron
現象†
次のようにプロセスIDをみて多重起動判定しようとする。手動でスクリプトをキックした場合はよいが、cronからキックすると必ず多重起動であると判定されてしまう。
OLDEST=$(pgrep -fo $0) if [ $$ != $OLDEST ] then
原因†
親プロセスがOLDESTになってしまうため。
cronで実行するとふたつのプロセスが上がる。
/bin/sh スクリプト /bin/sh -c スクリプト
上が実際に動かしたいスクリプトのプロセス、下がcronに設定したコマンドを文字列として入力してキックしているプロセスである。OLDESTには後者のプロセスが拾われてしまう。
対策†
「OLDESTが親プロセスとも違う」を多重起動判定の条件に加える。
OLDEST=$(pgrep -fo $0) if [ $$ != $OLDEST ] && [ $PPID != $OLDEST ] then
cronからキックした場合はOLDESTが親プロセス($PPID)と同じになる。手動でキックした場合はOLDESTがこのプロセス($$)と同じになる。
備考†
$PPIDで親プロセスのプロセス番号が取得できる。手動でキックした場合はシェルが親になっている。