配定时任务时总要写 */5 * * * * 这样的表达式。五个星号分别管什么?本文讲清语法并给常用示例。
Cron 表达式共五段:分 时 日 月 周。如 30 2 * * 1 表示每周一凌晨 2:30 执行。Spring 等框架的六段式多了秒字段在最前。
* 任意值;, 枚举多个值;- 区间;/ 步长(如 */5 表示每 5);? 不指定(日和周互斥时用);L、W、# 为部分实现支持的扩展语法。
每分钟:* * * * *;每小时:0 * * * *;每天凌晨 2 点:0 2 * * *;每周一上午 9 点:0 9 * * 1;每月 1 号:0 0 1 * *;每 5 分钟:*/5 * * * *。
日和周同时指定时是或的关系(满足其一即执行),不是且;服务器时区与本地时间不一致导致执行时间偏移;忘记转义导致命令未执行。
语法相近,但 Spring 默认六段(含秒),且用 cron 属性而非位置参数,迁移时注意字段数。
需要分布式锁或调度平台(如 XXL-Job)统一调度,多台机器各自跑 Cron 会重复执行。
多数调度器启动时报解析错误;部分框架静默忽略导致任务不执行,务必用工具验证。