また海外サーバネタです。 これまで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はうまく処理してくれるみたいですが)