web-dev-qa-db-ja.com

夏時間とCron

Cronに午前2時と午前3時に実行するようにスケジュールされたジョブがある場合、それらのジョブは夏時間の影響をどのように受けますか?

時刻が1時間戻ると、時刻は午前2時59分59秒から午前2時00分に直接変わりますか?午前2時のジョブが2回実行され、午前3時のジョブが1回実行されるという意味ですか?または、時刻が最初に午前3:00:00に変更され、次に午前2:00:00に変更されて、両方のジョブが2回実行されますか?

時間が1時間進むと、時間が1:59:59 amから3:00:00 amになり、午前2時のジョブが実行されず、午前3時のジョブが1回実行されますか?または、時刻が午前2:00:00から3:00:00にシフトして、両方のジョブが1回実行されるのですか?

要するに、私が疑問に思っているのは、1時間増えると午前3時が1〜2回発生し、1時間を失うと午前2時になるということです。 Googleを検索したところ、これについて何も見つけることができませんでした。

38
Joe W

答えは、使用しているcronのバリアント/拡張子によって異なります。一部のバリアントは夏時間を処理しないため、ジョブが失われ、ジョブが2回実行されます。

Paul Vixie cronを使用している場合は、DSTの変更を処理します。 cron manページ のとおり:

cronは毎分チェックして、スプールディレクトリのmodtime(または/ etc/crontabのmodtime)が変更されたかどうかを確認します

さらに、夏時間を参照してください(2番目のパラグラフはあなたの答えを明確に説明しています)

夏時間およびその他の時間変更

   Local time changes of less than three hours, such as  those  caused  by
   the  start or end of Daylight Saving Time, are handled specially.  This
   only applies to jobs that run at a specific time and jobs that are  run
   with  a    granularity  greater  than  one hour.  Jobs that run more fre-
   quently are scheduled normally.

   If time has moved forward, those jobs that would have run in the inter-
   val that has been skipped will be run immediately.  Conversely, if time
   has moved backward, care is taken to avoid running jobs twice.

   Time changes of more than 3 hours are considered to be  corrections  to
   the clock or timezone, and the new time is used immediately.

したがって、タイムシフトが2:59:59または3:00:00になる可能性がある場合は常に、cronは状況を処理して見逃したジョブのみを実行することでジョブの実行を処理し、既に実行されたジョブの実行を回避します。

39
mtk