夏時間の適用日と終了日のタスクスケジューラーの動作はどうなってるの?
サマータイムがどうやばいかを極端な例で非エンジニアに説明すると、もし原発の制御プログラムに「午前1時に冷却水排水」「午前2時に排水中止」みたいなコードがあって、午前2時がサマータイムで消えたとき、何も対策しないと冷却水が消失します。
— 平田朋義 (@tomo3141592653) August 6, 2018
こういう説明をしてる人がいたので、実際の Windows のタスクスケジューラーの動作について調べてみました。
INFO: Task Scheduler Behavior at Daylight Saving Time Transitions and Other Events
サマータイム(DST)移行処理について この記事では、2つの夏時間の移行シナリオを指定するために、Spring Forward(SF)とFall Back(FB)という用語を使用します。 DSTが有効になると、SFが発生します。システム時刻は、たとえば、午前2時の地元の日曜日の朝など、1時間前に調整されます。したがって、2:00:00~2:59:59の時間は、そのタイムゾーンのその日のシステムには表示されません。 FB中にその逆が起こります。システム時間は、例えば、午前2時の地元の日曜日の朝など、1時間後に調整されます。そのタイムゾーンでは、1:00~1:59:59の間の分が繰り返されます。システム内で2回発生します。 |
・ω・ ここまでは、わかる
スプリングフォワード SF遷移によって発生した時間内にスケジュールされたタスクに対して、スケジューラプログラムが動作する可能性のあるいくつかの方法があります。 動作1 動作2 動作3 |
動作1は、時間が来ないのでスキップされるケース
動作2は、動作順序についてパラドックスが発生するケース
動作3は、圧縮して実行されるので、処理時間の問題が出るかもしれないケース( Windows はこれ )
フォールバック
以下は、時間の繰返し時にスケジュールされているタスクに対してスケジューラプログラムが動作するいくつかの動作です。 動作1 動作2 動作3 |
動作1は、時間が巻き戻るので、時間通り、2回実行されてしまうケース
動作2は、該当時間までの残り時間から逆算されて実行されるケース
動作3は、実際のシーケンスと等間隔で実行されるケース( Windows はこれ )
Twitter の例のように、2回実行されたり、処理がスキップされたりすることはなさそうですが
「冷却水を1時間注水する」ではなく「冷却水を注水開始」「冷却水を注水終了」というスケジュールだったら一瞬で終わってしまう、なんてケースはあるかもしれませんね・ω・
Comments