cronが設定した時間どおりに実行されない場合の対処法
cron が crontab で設定した時間どおりに実行されないという現象に出くわして困ったのですが、何とか解決できたのでその方法を紹介しておきます。
まず、以下のような設定(1 分ごとに実行)をしてみると、期待したとおりに動いている様子。
* * * * * date >> /path/to/cron_check.txt
次に、以下のような設定(14 時台で 1 分毎に実行)をしてみると、14 時台にも関わらず実行されません。
* 14 * * * date >> /path/to/cron_check.txt
もしかしてタイムゾーンがズレているのかも、と思い、次のように仕込んでみました。
* 0 * * * echo '0' >> /path/to/cron_check.txt
* 1 * * * echo '1' >> /path/to/cron_check.txt
* 2 * * * echo '2' >> /path/to/cron_check.txt
* 3 * * * echo '3' >> /path/to/cron_check.txt
:
* 22 * * * echo '22' >> /path/to/cron_check.txt
* 23 * * * echo '23' >> /path/to/cron_check.txt
すると 14 時台なのに、cron_check.txt
に出力されたのは「0」。やはりタイムゾーンが狂ってるっぽいです。
NetBSD で cron の動作時間がずれる - CORY's twilight zone を参考にして、crontab の先頭に
TZ="Japan"
を追記してから
$ sudo /sbin/service crond restart
で cron のサービスを再起動したところ、無事、時間通りに実行されるようになったのでした。(TZ="Japan"
の代わりに CRON_TZ="Japan"
としてもうまくいきました。)
もし、同じような問題に出会った方は試してみてください。