cron表达式

cron 表达式用于定义定时任务的执行时间规则。它由若干字段组成,不同系统略有差异(如 Linux crontab 与 Spring 的 cron 表达式),但核心思想相同:用数字和符号描述任务的周期性时间点

一、标准格式(Linux)

共 5 个字段:

字段 含义 取值范围
1 分钟 (Minutes) 0–59
2 小时 (Hours) 0–23
3 日期 (Day of Month) 1–31
4 月份 (Month) 1–12 或 JAN–DEC
5 星期 (Day of Week) 0–7(0或7代表星期天)

示例:

1
2
3
4
30 2 * * *        # 每天凌晨2:30执行
0 */6 * * * # 每6小时执行一次
0 9-18 * * 1-5 # 周一至周五,9点到18点每小时执行一次
15 10 15 * * # 每月15日10:15执行

二、Spring 或 Quartz 格式

共 6 或 7 个字段:

字段 含义 取值范围
1 秒 (Seconds) 0–59
2 分 (Minutes) 0–59
3 时 (Hours) 0–23
4 日 (Day of Month) 1–31
5 月 (Month) 1–12 或 JAN–DEC
6 星期 (Day of Week) 1–7 或 SUN–SAT
7(可选) 年 (Year) 1970–2099

示例:

1
2
3
4
0 0 12 * * ?       # 每天中午12点执行
0 15 10 ? * * # 每天10:15执行
0 0/5 * * * ? # 每5分钟执行一次
0 0 9 ? * MON-FRI # 每周一到周五上午9点执行

三、通配符说明

符号 含义
* 任意值
/ 步长,如 */5 表示每5单位执行一次
- 范围,如 1-5 表示1到5
, 多个值,如 1,3,5
? 不指定具体值(常用于“日”和“星期”字段避免冲突)

四、差异简述

  • Linux crontab 没有“秒”字段;
  • Quartz/Spring cron 多一个“秒”字段;
  • Quartz 中日与星期字段不能同时指定,需用 ? 占位。

五、常见业务的 cron 表达式

业务场景 表达式(Quartz/Spring 格式) 说明
每天凌晨 2 点执行备份 0 0 2 * * ? 每天 02:00 运行
每隔 10 分钟采集一次数据 0 0/10 * * * ? 每 10 分钟触发一次
每小时执行日志清理 0 0 * * * ? 每小时整点执行
每天 23:30 发送日报 0 30 23 * * ? 每天晚上 11:30 执行
每周一凌晨 1 点重启服务 0 0 1 ? * MON 每周一 01:00 执行
每月 1 日 0 点归档数据 0 0 0 1 * ? 每月第一天 00:00 执行
工作日每天早 9 点启动任务 0 0 9 ? * MON-FRI 周一至周五 09:00 执行
每天每 30 秒检测一次状态 0/30 * * * * ? 每 30 秒触发
每天 8 点到 20 点,每小时执行一次 0 0 8-20 * * ? 8:00–20:00 每整点执行
每月最后一天 23:59 生成月报 0 59 23 L * ? 每月最后一天晚上 11:59 执行

Linux crontab(无秒字段)等价版本,直接去掉首个 0