crond处理夏季时间+1小时变化吗?


16

上周末,我们不得不将时间从02:00更改为03:00。

问题:如果在02:30进行cronjob,会发生什么情况?

crond是一个非常古老的调度解决方案,它可能应该处理它,但是不知道如何。

Answers:


18

这可能取决于您的cron实现,但是手册中流行的Vixie cron指出:

然后,cron每分钟唤醒一次,检查所有存储的crontab,检查每个命令以查看是否应在当前分钟内运行。

当时钟更改时间少于3小时时,例如在夏令时的开始和结束时,存在一些特殊的注意事项。如果时间提前了,那些原本可以跳过的工作将在更改后立即运行。相反,如果时间倒退少于3小时,则属于重复时间的那些作业将不会重新运行。

仅在特定时间运行的作业(未指定为@hourly,也没有在小时或分钟说明符中使用'*')。使用通配符指定的作业将根据新时间立即运行。

由于DST更改少于3小时,因此您的程序将在3:00 AM之后不久运行

我不确定这是否是Vixie cron的特定行为,我似乎还记得这就是我的PDP-11在80年代的运作方式,但是我不确定。


2
哇,来自80年代的知识-脱帽了!
以撒

经验法则:每年一次,您在该小时范围内的任务将失效。一年一次,您的老兄会跑两次。结论:并非总是如此。相关:停止使用当地时区!
tedder42 '16

@ tedder42请提供参考,您的主张与cron的文档和实际行为相抵触。
Anthon


那个轶事案例指的是凌晨2点和凌晨3点,与问题(指的是2:30)下午无关。您的参考文献可能会很有趣(旧),但是与我的经验不符。运行没有时区的服务器有其自身的问题。
Anthon

2

最好的解决方案是让您的计算机在硬件时钟设置为UTC,(协调世界时),AKA GMT或Zulu时间的情况下运行,并且仅通过设置本地时区来更改显示时间的方式以允许夏令时时间接管。

在SUSE Linux上,并且可能在大多数其他Linux上,如果将硬件时钟系统->环境->时钟-> HWCLOCK设置为带有-u标志的UTC,则您的时区设置为您所在的系统,系统将自动显示本地时间DST更正为您。

这具有许多优点:

  • 您将无需再为DST更改手动调整时钟
  • CRON选项卡将存储在UTC时间并在UTC时间执行
  • 如果在DST结束之前的01:30写入了一个文件(例如日志),在DST结束之后的01:20写入了另一个文件,则该文件将比另一个文件“更新”,因为文件时间戳将是UTC并且只是根据显示时的当前时区翻译显示。

有关更多信息man hwclock,请在终端中输入。


2
小顽皮。UTC不是“通用时间常数”。UTC表示协调世界时
fpmurphy '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.