サマータイムで不具合
Linuxのタイムゾーンの設定で、サマータイムがあるタイムゾーン適用されていることで、とある案件で、以下の様な事象がありました。
概要
あるシステムSは、外部のシステムAから、毎日レポートを取得して処理をおこなう。
Aについて
Aでは毎日0時に前日分のレポートを生成する。
レポートが出来上がるまでに数分程度のラグがある。
レポートのリクエストは日付が必須。
リクエストを受けたら該当日のレポートを返す。
Sについて
crontabで毎日午前1時に、前日を指定してリクエストを行ない、レポートを受け取って処理をおこなう。
問題発生
実装したのが年末ごろ。最近になってレポートが取得できなくなった。
取得できなかったリクエストを手動で実行してみると、何故か取得できる…
なんでだろう?なんでだろう?
原因
サマータイムの影響でシステムSの午前1時にリクエストしたのがシステムAでは午前0時にリクエストを受けた結果となり、Aでレポートが出来上がっていない状態になってしまったらしい。
システムSの利用者が米国なのでLinuxのタイムゾーンを変更していたのですが、それによってサマータイムの影響がCRONの実行時間にも影響してしまいました。
取得時間をずらして対応しました。
メモ
各国のサマータイム実施状況についておおざっぱにメモ。
国によってまちまち。
正確な切り替え日は、その年に決定する国もある。
国の中でも一律ではなかったりする。
アメリカだと2007年以前と以後で変わった。
ロシアやめた。
第○週の○曜日って何月何日?
南半球では逆。
ややこしいからやめようよ…と言いたくなる。
- アメリカ合衆国(一部除く。2007年から)、カナダ(一部除く)、メキシコ(一部除く)
- 3月第2日曜日午前2時~11月第1日曜日 午前2時(現地時間基準)
開始日には2時が3時になり(1時59分59秒の次が3時00分00秒)
終了日は2時が再度1時(1時59分59秒の次が1時00分00秒)になるため、開始日は1日が23時間、終了日は逆に25時間になる)
アメリカの場合だとハワイ、サモア、グアム、プエルトリコ、米領ヴァージン諸島とアリゾナ州などの地区を含まない。 - ヨーロッパ各国(一部除く)
- 3月最終日曜日午前1時~10月最終日曜日午前1時(UTC/GMT基準、2006年から)
- ロシア
- 3月最終日曜日午前2時~10月最終日曜日午前3時(現地時間基準)
だったけど、2011年、夏時間を廃止。 - オーストラリア(北部は実施なし、西部は2006年度から3年間試行中)
- 10月第一日曜日午前2時~翌年4月第一日曜日 午前3時(現地時間基準、2008年から)
- ニュージーランド(一部除く)
- 9月最終日曜日午前2時~翌年4月第1日曜日午前3時(現地時間基準)
- ブラジル(一部除く)
- 10月第3日曜日午前0時~翌年2月第3日曜日午前0時(現地時間基準)
コメント