cronはサマータイムを処理できる? そんなに甘くありません
サマータイムのお話、続きです。
なにやら、cronはサマータイムを適切に処理できる、という主張もあるようですが、ちょっと誤解があるようです。
前回も少し触れましたが、cron というのは UNIX/Linux系OSが標準搭載している簡易ジョブスケジューリングシステムです。で、これが「サマータイム切替によって3時間以内で時間が飛んでも問題は起きない」というわけですが、実際には「ジョブが飛ばされたり二重実行されることはない」というだけの話で、
ジョブ実行の順序や実行間隔は保証されません。
図解してみましょう。
ajob, bjob, cjob という3つのジョブがあって、それぞれの完了を待って次を起動しなければいけない依存関係があったとします。これを、「それぞれ1分あれば処理できるから10分おきに起動するように設定しておけば大丈夫だろう・・・」といった甘い考えで10分おきに起動するスケジュールを組んだとします。
(厳密には個々のジョブごとに完了確認をかまして異常があればアラートを上げるべきですが、現実にそのように組まれているシステムばかりではないので)
そんな甘いスケジューリングでも普通は問題なく動くわけですよ、普通は。
ではこれがサマータイム開始日にどうなるかというと、ajob, bjob, cjob のすべてが同時に一斉起動される、という事態を招きます。
当然、「aが終わってからb、それが終わってからc」を想定していた設計とは違う動きになるため正常稼働しません。
この種の「想定外」の事態がそこら中で起きることが予想できるわけです。
それは設計が悪い、と言うのは自由です。しかし現実にそういう設計のシステムが無数に存在するわけで、それが予定通り動かなくなったときにはユーザーは軒並み損害を被ります。その損害がどの程度になるか見当もつかない、ということで、この種の事情を知るIT関係者は軒並み反対しているわけです。
(もちろん、この話は cron で済む程度の簡単なシステムの話で、より高度なジョブコントロールシステムを使っている場合は別な議論になりますが、いずれにしても「時間が飛ぶ」ことが問題を起こすのは同じです)