海外サーバのcronとサマータイム

また海外サーバネタです。 これまでApache (CGI)MySQLとタイムゾーン設定方法を書いてきましたが、今回はcronと時差の話。

Webホスティングサービスの場合、cron自体を日本時間で動かすわけにはいきませんから、crontabには現地時間で設定をおこなう必要があります。たとえば、あるプログラムを日本時間で毎日深夜0:13に実行させたいなら、サーバが置いてある北米の西海岸とは時差17時間ですので、現地時間で(前日の)朝7:13に実行されるようにします。これで「現地時間の毎朝7:13に実行される」ようになりました。
しかし、そのことは次のどちらともイコールではありません。
「日本時間の毎日深夜0:13に実行される」
「24時間おきに実行される」

なぜなら、USには「サマータイム(夏時間)」があるからです!
(正確にはUSではDaylight Saving Time、略してDSTと言うようですが)

いまは冬時間なので、西海岸の朝7:13は日本の(翌日)深夜0:13ですが、夏時間が始まると、西海岸の朝7:13は日本時間では(当日)深夜23:13となってしまうのです。
なので、夏時間が始まる日と終わる日は、「24時間ごと」に実行されるわけではありません。「毎日1回」実行したかった処理は、夏時間が始まるときは日本時間で0:13と23:13の2回実行されてしまうし、夏時間が終わるときには実行されない日ができてしまいます。

というわけで、「毎日実行したい」処理がある場合は、日本時間の深夜0時±1時間は避けて設定したほうが無難でしょう。
ついでに、夏時間の切り替えがおこなわれる「現地時間の午前2時±1時間」も避けておくと、より安心できます。たとえば夏時間が始まる日は、時刻は 1:58→1:59→3:00→3:01→... と進むので、午前2:22に実行するよう設定したジョブは、実行されない可能性もあるからです。(最近のcronはうまく処理してくれるみたいですが)

このブログ記事について

このページは、水の森が2008年3月 3日 01:15に書いたブログ記事です。

ひとつ前のブログ記事は「海外サーバでRuby/MySQLを使う」です。

次のブログ記事は「サーバ移転失敗(PSPカスタムテーマあぷろだ)」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。