Cron表达式怎么写?定时任务规则详解、常见示例与在线生成工具

无论是使用 Linux 系统底层的 crontab -e 执行定时备份,还是在 Java Spring Boot、Node.js、Python 中运行定时调度任务,Cron 表达式都是开发者无法绕开的技术规范。

一个字符写错,就可能导致本该夜间执行的数据归档在业务高峰期突发运行。本文将用最通俗易懂的方式拆解各字段位置与常用通配符,让你不再畏惧定时表达式。

1. 5 位、6 位与 7 位 Cron 表达式对比

不同框架和运行环境对 Cron 的字段定义略有差异,切勿生搬硬套:

  • Linux 原生 Crontab(标准 5 位):格式为 分 时 日 月 周(最小单位为“分”);
  • Java / Spring Task(常用 6 位):格式为 秒 分 时 日 月 周(第一位精确到“秒”);
  • Quartz 调度框架(完整 7 位):格式为 秒 分 时 日 月 周 年(末位增加了可选的年份)。

2. 各字段的取值范围与位置定义(以 6 位为例)

字段位置 字段名称 允许值范围 允许的特殊通配符
第 1 位 秒(Seconds) 0 - 59 * , - /
第 2 位 分(Minutes) 0 - 59 * , - /
第 3 位 时(Hours) 0 - 23 * , - /
第 4 位 日(Day of Month) 1 - 31 * , - / ? L W
第 5 位 月(Month) 1 - 12 或 JAN-DEC * , - /
第 6 位 周(Day of Week) 1 - 7 或 SUN-SAT * , - / ? L #

3. 核心通配符的含义精解

  • 星号 *:代表“每一”。例如在分钟位上写 *,表示每分钟都会触发;
  • 斜杠 /:代表“步长/递增”。例如 0/5 在分钟位表示从第 0 分钟开始,每隔 5 分钟执行一次;
  • 短横线 -:代表“区间连续范围”。例如 9-18 在小时位表示每天 9 点到 18 点之间触发;
  • 逗号 ,:代表“枚举列举”。例如 1,3,5 在周位表示每周一、三、五执行;
  • 问号 ?:代表“无特定值”。由于“日期(Day of Month)”和“星期(Day of Week)”通常互斥,当指定了其中一个时,另一个必须填写 ?,避免语义冲突。

4. 经典高频定时任务表达式速查

0 0 12 * * ?          -> 每天中午 12:00:00 准时触发
0 0/15 * * * ?        -> 每隔 15 分钟触发一次 (00, 15, 30, 45分)
0 0 2 * * ?           -> 每天凌晨 02:00 执行 (适合数据夜间冷备)
0 30 9 ? * MON-FRI    -> 每周一到周五上午 09:30 触发 (适合工作日开市提醒)
0 0 0 1 * ?           -> 每月 1 号凌晨 00:00 执行 (适合月度报表统计)
0 0 23 L * ?          -> 每月最后一天晚上 23:00 触发 (L 表示 Last)

5. 在线生成与推算未来执行时间

手动编写容易遗漏通配符细节,建议使用易处理 Cron表达式生成器:通过勾选直观的可视化界面,自动拼接出符合规范的 Cron 字符串,并实时模拟出接下来 5 次的精确执行时间点,确保逻辑万无一失。

Cron表达式生成

高效安全的在线工具,无需安装即用即走

立即在线处理