47

如果 Cron 有一个工作计划在凌晨 2 点运行,一个在凌晨 3 点运行,那么这些工作将如何受到夏令时的影响?

当时间倒退一小时时,时间是否直接从凌晨 2:59:59 转到凌晨 2:00:00?这意味着凌晨 2 点的作业将运行两次,而凌晨 3 点的作业将运行一次?或者时间是否首先更改为凌晨 3:00:00,然后是凌晨 2:00:00,从而导致两个作业运行两次?

当时间向前移动一个小时时,时间是否从凌晨 1:59:59 变为凌晨 3:00:00 导致凌晨 2 点作业不运行而凌晨 3 点作业运行一次?还是时间从凌晨 2:00:00 转移到凌晨 3:00:00 导致两个作业都运行一次?

简而言之,我想知道的是,当增加一个小时时,凌晨 3 点会发生一次或两次,而失去一个小时,凌晨 2 点是否会发生。在 Google 上查找时,我无法找到任何关于此的内容。

4

2 回答 2

46

答案将取决于您使用的 cron 的变体/扩展。某些变体不处理夏令时,导致作业丢失和作业运行两次。

如果您使用的是 Paul Vixie cron,那么它会处理 DST 更改。根据cron 手册页

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 会通过处理情况并仅运行错过的作业来处理作业,并避免运行已经运行的作业。

于 2012-11-02T15:56:34.113 回答
1

说清楚,这取决于你住在哪里,如何安排你的 cron 作业(你需要照顾的 Unix cron,而 Java 计划程序自己照顾!)。

在美国,时钟在当地时间凌晨 2:00 更改。在春天,时钟从凌晨 1:59 到凌晨 3:00 向前跳;在秋季,时钟从凌晨 1:59 回落到凌晨 1:00

在欧盟,时钟在世界时间凌晨 1:00 更改。在春天,时钟从上午 12:59 到凌晨 2:00 向前跳;在秋季,时钟从凌晨 1:59 回落到凌晨 1:00

示例:如果您在 2020 年 10 月 25 日今天凌晨 1:30 有一个 Unix cron 作业,那么您的作业会运行两次。

于 2020-10-25T13:43:45.300 回答