cron での重複実行チェック

古都の老兵
2022-09-20
2022-09-20

はじめに

定期的に処理をさせたい時にcrontabを使う事が多いと思いますが、定期的に処理はさせたいが重複起動されるのは困る事ってありますよね。
何も考えずに定期実行させているといつの間にか定期実行プロセスだらけで溢れている・・・なんてことも。
重複チェックには幾つかやり方が考えられると思いますが、スマート?なやり方を紹介したいと思います。

やり方

重複チェックでまず思いつくのは実行するプログラムにロックファイルを作成させて確認する方法があります。多くの方が真っ先に思いつく方法ではないでしょうか。
次に自身のプロセス名が存在しているかどうかをチェックする方法なんかも思いつくかもしれません。
ただ何れの方法も実行するプログラム内に処理を記述しなければならなかったり、異常終了した場合にロックファイルが残るといった問題もあります。
そんな時に使えるコマンドがpidofです。

pidofコマンドは指定されたプログラムのプロセスIDを調べてくれるコマンドですが、そのままでは調べるだけなので、少し工夫します。

/usr/bin/pidof -x (実行したいプログラム名) || (実行したいプログラム名)

||を使ってpidofが失敗(異常終了)、つまりプログラムが見つからない場合に実行される事になります。
プロセスIDが戻ってくる場合は正常終了となりますからプログラムは実行されません。

実際にcrontabへの記述例だと

* * * * * pidof -x (実行プログラム) || (実行プログラム)

最後に

一番重要なのは想定通りに正しく実行される事ですのでプログラム内でチェックするやり方も間違いではありません。
まあこういうやり方もあるよという事でご参考まで