🏠 首页 › 攻略 › Cron 表达式不会写?5个高频场景直接抄

Cron 表达式不会写?5个高频场景直接抄

定时任务配错了错过一个亿?本文拆解 Cron 5位语法,给出5个高频场景的现成表达式:整点备份、每30分钟、工作日9点、月底结账单、每天凌晨清理,附在线生成工具链接,直接抄走用。

0 0 * * * 到底几点跑?

问 10 个开发,8 个要盯着数半天。Cron 表达式这东西,写的人觉得简单,读的人全懵。

原因就一个:5 个位、6 种符号(*、/、-、,、?、L),排列组合太自由,没有统一记忆法。

换个思路:别记语法,记场景。下面 5 个高频任务,表达式直接抄,用时再对照语法补理解。

先花 30 秒看懂 5 位

分  时  日  月  周
|   |   |   |   |
└───┴───┘───┘───┘
  第 6 位可选:年

每位的取值范围:分(0-59)、时(0-23)、日(1-31)、月(1-12)、周(0-7,0和7都是周日)。

符号速查:

  • * 全部
  • , 枚举,9,18 表示 9 点和 18 点
  • - 区间,1-5 表示周一到周五
  • / 步长,*/30 表示每隔 30

5 个高频场景,直接抄

场景 1:每天凌晨 2 点备份数据库

0 2 * * *

第 3、4、5 位都是 *,就是"每天都"。

场景 2:每小时执行一次健康检查

*/5 * * * *

注意是 */5(每 5 分钟)还是 */60?*/60 写法有问题,分只有 0-59,正确写法就是 0 * * * *(每小时的第 0 分钟)。

场景 3:工作日早上 9 点发日报

0 9 * * 1-5

最后一位 1-5 = 周一到周五,周末不触发。

场景 4:每月最后一天结账单

这是最容易写错的场景,因为每月的"最后一天"没固定数字。

0 0 L * *

L = Last,专门表示"当月最后一天"。别写成 28/29/30/31 取并集,平年 2 月就漏了。

场景 5:每天 8:00 和 20:00 各提醒一次

0 8,20 * * *

逗号分隔的两个小时,各触发一次。

配错了怎么快速验证

不放心就别直接写进 crontab。两步验证:

第 1 步:在线生成器可视化

用 navbox Cron 表达式生成器 填入表达式,直接显示"下次运行时间"。0 2 * * * 填进去,秒级看到下次是明天 02:00,对不对一眼确认。

第 2 步:手动触发测试

别等 24 小时验证。临时把间隔调短:

* * * * *   # 每分钟跑一次,验证逻辑

观察 2 分钟没问题,再改回正式频率。这是最稳的上线方式。

一个坑:时区

Cron 按本机系统时区运行。容器里跑的服务,默认经常是 UTC,你以为 9 点是北京时间,其实是 17:00 UTC。

排查方法:先在目标机器上 date 看一眼当前时区,再决定表达式。跨地域部署的团队,这条比语法本身更重要。

下次要配定时任务,先按场景抄上面 5 条,用生成器确认下次运行时间,再上线。比死记符号快得多。