pyてよn日記

一寸先は闇が人生

Linux における cron ジョブのサマータイム対応

 オリンピック開催に向けて一時期話題になった(2018 年の夏頃?)日本での「サマータイム」の導入.TL のエンジニアの方々が物議を醸していたのを目にしたが,当時は自分にとって理解のできない話だったのでスルーしていた.やっと少しだけ理解できるようになったので今更ながら調べてみた.

 本記事では,表題の通り,cron とサマータイム対応に関して調べたことをポイントとしてまとめ,参考にした記事を列挙した.

cron とサマータイム対応のポイント

 いくつかの記事を読んで重要そうなポイントをピックアップした.

  • 「cron でのバッチ処理サマータイムが考慮されているから二重実行,失敗の心配はなさそう」という記事が多かった.しかしそれは誤解(以下に続く).
  • 実際は,ただ単に「ジョブが飛ばされたり二重実行されることはない」ということで,ジョブ実行の順序や実行間隔が保証されないという問題が起こる.実行される順序に依存関係がある複数のジョブ(前の処理結果を次のジョブに渡す,など)を実行する際には要注意.
  • いずれにせよ,「時間が飛ぶ」ことで問題が起きないようにするための設計が必要.
  • アプリケーションを作る上で,DB 上では UTC を用いて,常に時差を取る形でタイムスタンプを扱った方がロジックが一貫する

参考記事 1:cron はサマータイムを処理できる? そんなに甘くありません

  • 一番有用そうだと思った記事

blogs.itmedia.co.jp

  • 「cron でサマータイムを適切に処理できる」というのは誤解.
  • ジョブが飛ばされたり二重実行されないだけ.
  • ジョブ実行の順序や実行間隔は保証されない.

参考記事 2:Linux における cron のサマータイム対応はどうなっているのか?2 時間サマータイムは大丈夫?

www.ryuzoji.com

  • cron 自体は,3 時間未満のサマータイムが考慮されており,Linux において cron を使用したバッチ処理を行う場合はサマータイムによる二重実行,失敗を考慮する必要はない(ただし,ジョブの実行順序,実行間隔には十分注意).

1 時間を超える間隔で実行される cron ジョブに関しては、サマータイム実施時に特別な配慮がなされます。 サマータイム開始時は、そのスキップされた時間の cron ジョブがまとめて実行されます。サマータイム終了時は、時間が逆行した部分に関しては二重に実行されないように手配されます。 なお、3 時間以上の変更が起きた場合は通常の時刻変更としてみなされ、このような配慮は為されません。また、1 時間以下の間隔で実行する cron ジョブに関しては通常通り実行されます。

参考記事 3:サマータイム対応方法のメモ

qiita.com

参考記事 4: タイムゾーンを考慮した日時の扱いのベストプラクティス

 以下の記事はまだちゃんと読んでいないが,ブックマークコメントを含め自分の勉強になりそうなためメモ書き.

www.m3tech.blog

b.hatena.ne.jp