
上周末我们不得不将时间从 02:00 更改为 03:00。
问题:如果 02:30 有一个 cronjob 会发生什么?
crond 是一个非常古老的调度解决方案,它可能应该处理它,但不知道如何处理。
答案1
这可能取决于您的 cron 实现,但流行的 Vixie cron 在手册中指出:
然后 cron 每分钟醒来,检查所有存储的 crontab,检查每个命令以查看它是否应该在当前分钟运行。
和
当时钟变化少于 3 小时时,例如在夏令时开始和结束时,需要特别注意。如果时间提前,那些在被跳过的时间内运行的作业将在更改后很快运行。反之,如果时间向后移动小于3小时,则那些落入重复时间的作业将不会重新运行。
只有在特定时间运行的作业(未指定为 @hourly,也未在小时或分钟说明符中使用“*”)会受到影响。使用通配符指定的作业将立即根据新时间运行。
由于 DST 更改时间不到 3 小时,因此您的程序将在凌晨 3:00 后不久运行
我不确定这是否是 Vixie cron 的特定行为,我似乎记得我的 PDP-11 在 80 年代也是这样工作的,但我不确定。
答案2
最好的解决方案是让您的计算机在硬件时钟设置为 UTC(协调世界时)的情况下运行,又称 GMT 或祖鲁时间并且仅通过设置本地时区来更改时间显示方式,以允许夏令时接管。
在 SUSE Linux 以及可能大多数其他 Linux 上,如果硬件时钟系统 -> 环境 -> 时钟 -> HWCLOCK使用 -u 标志设置为 UTC,然后将您的时区设置为您所在的位置,系统将自动为您显示带有 DST 校正的当地时间。
这有很多优点:
- 您将不再需要根据 DST 更改手动调整时钟
- CRON 选项卡将在 UTC 时间存储并执行
- 如果一个文件(例如日志)是在 DST 结束前的 01:30 写入的,而另一个文件是在 DST 结束后的 01:20 写入的,则该文件仍将比另一个文件“更新”,因为文件时间戳将为 UTC,并且只是根据显示时的当前时区进行翻译以供显示。
要了解更多信息,请man hwclock
在终端中输入。