简体中文

开发者工具 · Crontab 生成器

Cron 和夏令时:为什么 02:30 作业可以跳过或运行两次

· 为什么它很重要

计划任务 时区 夏令时

02:30 候选时钟跨越挂钟时间线中的间隙
原始 ToolAcre 矢量图

挂钟每年跳动两次,并且在间隙或重叠处安排的 cron 作业会出现意外行为。这篇文章解释了 Vixie 派生的 cron 做了什么、其他人做了什么,以及如何围绕它进行调度。

当所选区域没有此类挂钟时间时,可能会出现预览候选缺失的情况

当所选时区的时钟向前移动时,每日挂钟时间可能会在某个日期缺失。 ToolAcre 表示这种情况,对于不存在的本地分钟不返回任何时刻,并在下次运行列表中跳过它。该表达式仍然有效;一个候选日历根本无法转换为该区域中的真实时刻。

此行为在 `wallClockToEpoch` 中实现,它转换建议的本地日期和时间,将结果格式化回同一区域并比较每个组件。不匹配返回 null。 `nextRuns` 忽略空候选并继续搜索,防止伪造的附近时间看起来与时间表完全匹配。

两个事件 — 春季向前移动一个小时,秋季向后重复一个小时

时钟变化创建了两种概念情况:与永远不会发生的墙时间的前向间隙,以及某些标签多次出现的后向重叠。该存储库进行了测试,用于在向前更改期间维持每日本地时间以及忽略不存在的春季时间。它不包含完整的重叠策略测试套件。

该证据边界很重要,因为调度程序实现可以做出不同的选择。本文描述的是浏览器预览算法,而不是通用守护程序行为。在时钟转换期间依赖重复任务之前,请阅读并测试目标主机上的实际调度程序,而不是将预览提升为执行承诺。

ToolAcre 省略了不存在的本地时间;它不会对每个 Vixie 派生的守护进程策略进行建模

该工作簿声称特定的 Vixie 派生守护进程在跳转后运行跳过的作业并抑制重复项。 ToolAcre 在其预览代码中两者都没有:它省略了本地组件无法往返的候选者。没有调用守护程序包,也没有对追赶策略进行建模。因此,这些操作声明被纠正而不是重复。

测试的伦敦示例在 3 月 2026 更改前后搜索 01:30。由于转换日期不存在该本地分钟,因此返回的天数为以下有效日期。这证明了路由自身的列表行为。它没有确定单独安装的 cron 进程对已保存的行执行的操作。

外部守护进程中的通配符调度行为是外部存储库证据

星星被解析器扩展到每个允许的值,但后来的挂钟转换仍然决定特定的日期时间是否映射到某个时刻。 ToolAcre 没有针对“通配符作业”的单独外部守护程序规则。所有候选人都使用相同的日历搜索和区域转换代码。

描述保持纯粹的语法:`* * * * *` 读作每分钟,而步进分钟字段接收步进措辞。这句话没有叙述过渡政策。使用该工具的计算示例的下次运行列表,并且不要仅从散文中推断出追赶、重试或重复抑制保证。

其他实现不是从此浏览器预览中推断出来的

区域实现依赖于浏览器或 Node 运行时公开的 `Intl.DateTimeFormat` 数据。 ToolAcre 验证提供的 IANA 区域名称,提供引擎的支持列表(如果可用)并包括 UTC。它不会检查 BusyBox、容器编排器或云 cron 产品。

当另一个调度程序不同意时,将其视为方言和运行时问题。记录其版本、区域配置和观察到的转换行为。浏览器预览作为透明比较仍然有用,但其代码无法回答另一个服务应用哪个策略或该服务是否重试错过的工作。

工作示例:选择墙上时间并检查 ToolAcre 的计算候选者

更安全的工作方法是选择部署区域,输入建议的日常表达并检查该环境已知的下一次转换的日期。如果所需的候选者缺席,请选择目标明确记录的另一个挂机时间或调度程序策略。更改时间后重新运行预览。

源在 02:30 处包含预设,但预设只是示例,并非通用建议。其有效性取决于所选的日历和区域。 ToolAcre 的五个结果窗口可能不会跨越遥远的过渡,因此在审核实施行为时在测试中选择合适的起始上下文。

区域选择是此预览的一部分,此处仅作为工具行为进行讨论

与工作簿的分离不同,区域处理直接是该工具预览的一部分。该面板询问“显示下一个运行区域”,并警告运行 cron 的机器可能使用与读取器不同的区域。选择区域会更改生成的时刻,同时保留表达式的挂钟字段。

该选择仅配置浏览器计算。它不会编写时区指令、更新服务器或将选择嵌入到复制的表达式中。在相邻的部署文档中保留预期区域,然后通过经过验证的针对该环境的机制配置实际的调度程序。

要点:在预期区域中预览,而不将列表视为执行保证

下次运行列表是来自五个字段的模型输出:起始时刻、日历算术和浏览器区域数据。它对于检测不存在的时间和意外的时间变化非常有价值。它既不保留守护进程跟踪,也不保留命令执行的证据。

使用预览来识别有风险的墙时间,然后验证过渡边界处的目标调度程序。 ToolAcre 的承诺是狭隘的:当当地选定的时间存在时,日常工作将保留在该时间,并且忽略不存在的当地候选人。除此之外的一切都属于已部署的系统。