传统五字段 Cron 依次表示分钟、小时、日期、月份和星期。写表达式前应先确认执行环境使用哪种语法以及服务器时区。

五个字段如何阅读

从左到右依次是分钟、小时、一个月中的日期、月份和一周中的星期。星号表示任意值,逗号表示多个值,短横线表示范围,斜杠表示步长。

例如 0 9 * * 1-5 表示周一到周五的 9:00 执行。实际星期编号在不同实现中可能略有差异。

常见任务示例

每 5 分钟可写为 */5 * * * *;每天凌晨 2:30 可写为 30 2 * * *;每月 1 日 8:00 可写为 0 8 1 * *。

如果平台使用六字段格式,最左侧可能多出秒字段。直接复制五字段表达式前必须阅读平台说明。

时区和重复执行问题

Cron 通常按服务器或任务平台配置的时区运行。容器、云函数和托管平台可能默认使用 UTC,与本地时间存在偏差。

涉及夏令时地区时,某些本地时刻可能不存在或重复。关键任务应记录实际触发时间并设计幂等逻辑,避免重复处理。

日期与星期组合的特殊规则

不同 Cron 实现对“日期”和“星期”同时受限时的解释并不完全一致,有些实现满足任意一个字段就触发,有些框架提供额外符号表达第几个星期几或每月最后一天。

不要仅凭在线解析结果推断生产环境行为。应使用与目标环境相同的解析器,在测试环境观察未来多次执行时间,尤其是月底、跨年和星期边界。

  • 确认是五字段、六字段还是七字段
  • 查看日期与星期的组合规则
  • 确认是否支持 L、W、#、? 等扩展符号
  • 在目标运行环境验证

定时任务不能只依赖表达式

Cron 只负责触发,不保证任务一定成功。应用还需要记录开始、结束、耗时和失败原因,并对可重试错误设计重试策略。多个实例同时运行时,还要避免同一任务被重复执行。

耗时可能超过调度间隔的任务应设置并发控制或分布式锁。任务逻辑最好具备幂等性,即使重复触发,也不会重复扣款、重复发信或重复生成数据。

  • 记录每次执行状态
  • 配置超时和重试
  • 避免多实例重复执行
  • 业务操作尽量幂等
  • 为连续失败配置告警

上线定时任务前的检查清单

先写出自然语言需求,例如“北京时间每个工作日 9:00”,再确定平台时区和 Cron 方言,最后编写表达式并列出未来至少十次触发时间。自然语言和样例时间都符合预期后再上线。

同时检查任务在节假日、夏令时、服务器重启和上次执行未完成时应如何处理。关键任务应提供人工补跑入口,而不是只能等待下一个周期。

  • 写清自然语言调度需求
  • 确认平台时区
  • 验证未来多次触发时间
  • 设计漏跑和补跑机制
  • 准备监控与失败告警

立即处理

使用相关工具

常见问题

关于这个问题

Cron 支持秒吗?

传统 Unix Cron 通常不支持秒,但部分框架采用六或七字段格式。

日期和星期同时填写时如何判断?

不同实现可能采用或关系或其他规则,必须以运行环境文档为准并测试。