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」。9時間ずれじゃないところが何となく納得いかないものの、やはりタイムゾーンが狂ってるっぽいです。

» NetBSD で cron の動作時間がずれる - CORY's twilight zone
» タイムゾーン

を参考にして、 crontab の先頭に

TZ="Japan"

と追記し、

sudo /sbin/service crond restart

で cron のサービスを再起動したところ、期待通りに実行されるようになったのでした。(TZ の代わりに CRON_TZ としてもうまくいきました。)

もし、同じような問題に出会った方は試してみてください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>