夏令时和 Cron

2024-01-09

如果 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 点的时间是否会发生。我在谷歌上搜索时找不到任何关于此的信息。


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

如果您使用 Paul Vixie cron,那么它确实会处理 DST 更改。根据cron 手册页 https://web.archive.org/web/20130905110602/http://unixhelp.ed.ac.uk/CGI/man-cgi?cron+8:

cron 每分钟检查一次,看看它的假脱机目录是否在 modtime(或 /etc/crontab 上的 modtime)已更改

此外,参考夏令时(第二段清楚地解释了你的答案)

夏令时和其他时间变更

本地时间变化少于三小时,例如由以下原因引起的变化 夏令时的开始或结束,会进行特殊处理。这 仅适用于在特定时间运行的作业以及已运行的作业 粒度大于一小时。运行更自由的工作 经常安排。

如果时间向前推进,那些本应在中间运行的工作 被跳过的 val 将立即运行。反之,如果时间 已向后移动,请注意避免运行作业两次。

时间变更超过 3 小时将被视为更正 时钟或时区,并立即使用新时间。

因此,每当时间变化可能是 2:59:59 或 3:00:00 时,cron 就会通过处理情况并仅运行错过的作业来处理作业,并避免运行已经运行的作业。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

夏令时和 Cron 的相关文章

随机推荐