运维 · 工程实践

定时任务上线前,怎样核对表达式、时区与重复执行

用合成执行记录核对Cron字段、时间单位、漏执行与重复执行,明确停止条件,并保存可复查的排查材料。

表达式能解释出来后,还需要观察目标调度器是否按预期触发、业务是否只产生一次副作用。本站的本地工具不创建任务,也不预测下一次执行时间。

本文材料均为合成记录,非本站运行结果。先在排查记录填写调度器名称与版本、配置时区、表达式、业务操作、部署版本和负责人。下面绑定Cronie数字方言;其他平台的秒字段、日期规则或扩展语法须另核实。

先区分字段匹配与经过的时间

将下面两份材料分别填入Cron工具:

成功解释样例:0 9 * * 1-5
分钟匹配0;小时匹配9;星期匹配1至5
时区配置:Asia/Shanghai(合成环境)
实际触发与业务结果:尚未执行,未知

失败解释样例:*/0 * * * *
步长为0,应拒绝解释;不得继续复制旧结果

*/35 * * * *在分钟字段匹配0和35,并不表示连续每隔35分钟。Cronie在日期与星期都受限时采用或关系;本工具对以星号开头的字段另作说明。字段合法也可能对应不存在的日期,例如二月31日;这些情况需要调度器和业务记录对照。

给事件时间明确单位与时区

在时间转换工具选择Unix秒模式输入1700000000.5,UTC对照应为2023-11-14T22:13:20.500Z。毫秒模式则使用1700000000500;日期模式可使用2023-11-15T06:13:20.500+08:00。三者描述同一瞬间。

不要根据数字位数猜单位,也不要把无偏移日期按本机时区补成事实。保留原日志单位和时区,UTC用于比较,本地格式只辅助阅读。本站日期输入只支持明示子集;拒绝不代表所有日期标准均无效。

对照实际执行与副作用

模拟任务:生成测试摘要,不发送邮件
对照A:触发标识run-001,业务标识summary-001,完成,产物数1
重试B:同一业务标识summary-001,已处理,新增产物数0
失败C:相同业务标识重复执行,最终产物数2
失败D:预期触发窗口已过,执行记录缺失;是否漏执行未知

B只在本模拟场景证明重复请求未增加产物;不代表所有故障窗口都实现幂等。重试或重启可能发生在副作用提交前后,需在自己的隔离环境验证。缺少记录也可能是采集故障,不能直接归为调度器未运行。

失败时停止并复查

发生重复副作用时先停止该任务的新触发,保留记录,核对已经产生的结果;不要通过再次执行“验证是否恢复”。保存旧配置、恢复步骤和负责人,明确回退代码不能撤销已完成业务操作。

时区变更、夏令时和部署重启应有独立场景:跳过或重复触发的行为依赖调度器版本与配置。按相同版本和条件重测,记录实际触发时间、业务标识和产物数。未取得证据时保留未知,参考停止条件。

把结果写入任务工作表,或在排查记录填写预期、实际和下一步;Markdown用于交付,JSON用于恢复,导入预览不验证记录真实性。

官方依据与复核范围

2026-10-04复核Cronie手册的字段、步长与日期规则;ECMAScript时间值用于核对Date的毫秒单位和有限范围。没有创建真实定时任务或测试生产重试。