pandazx's blog

データ分析など雑多な技術ブログ

シェルで二重起動防止

以下では、cronから実行すると常に二重起動と判定されてしまう。

OLDEST=$(pgrep -fo $0)
if [ $$ != $OLDEST ]; then
    echo "[ERROR] 二重起動を検知したため、$0 の実行を中止します。"
    exit
fi

そのため、以下のようにする。

OLDEST=$(pgrep -fo $0)
if [ $$ != $OLDEST ] && [ $PPID != $OLDEST ]; then
    echo "[ERROR] 二重起動を検知したため、$0 の実行を中止します。"
    exit
fi

理由は以下を参照。

障害メモ/cronからキックすると多重起動判定ミスする - ポケットがチケットでいっぱい