Cronが実行されないと思ったら、システム時刻がUTCだった話

タイトルまんまです。

cron設定していたタスクが実行された形跡がなかったので調べたら、システム時刻がUTCになっており、ただ単に実行されてないだけだったという話…😨

原因を発見したのはDBのcreated_atカラムを見ていたときでした。

明らかに関係ない時間が入っていたので調べてみたら発見しました。

まず、システム時刻というのがわからなかったので調べてみました。

システム時刻またはシステム時間(system time)とは、計算機科学およびプログラミングにおいて経過時間を表現する概念である。 この意味において「時刻」とはカレンダー上の経過日数も含む。

https://ja.wikipedia.org/wiki/%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E6%99%82%E5%88%BB

要はPCの時計に表示されている時計のことですね。

日本だったら、JST(Japan Standard Time)が採用されているようです。

今回はEC2上で動作しているプログラムだったので、UTC(Coordinated Universal Time)が使われていました。

Linux 上でシステム時刻を表示する場合は、dateコマンドを使用して取得できます。

システム時間を変更せずに、cronの実行時間にJSTを使用したい場合は、CRON_TZ=Asia/Tokyoを追加すれば良さそうです。

以下のような感じです。

CRON_TZ=Asia/Tokyo
00 05 * * * sh hogehoge.sh

これでjstでcronが実行されるようになりました!

コメント

タイトルとURLをコピーしました