一、定义

Cron 是一种定时任务时间调度语法,源自 Unix/Linux 系统的 cron 定时服务,用于精准定义任务触发时间规则,广泛应用于 Linux 定时脚本、Java Quartz、Spring Scheduled、Docker、Airflow、XXL-Job 等各类定时调度框架。

通过一串由空格分隔的数字 / 符号字符串,描述秒、分、时、日、月、星期、年执行周期,无需编写复杂时间判断逻辑。

二、两大主流标准格式

1. Linux 原生 Cron(5 位,无秒、无年)

格式:分 时 日 月 星期 适用:服务器 shell 定时任务、crontab 字段范围:

  1. 分钟:0–59
  2. 小时:0–23
  3. 日期:1–31
  4. 月份:1–12
  5. 星期:0–6(0 = 周日,6 = 周六)

2. Java/Quartz/Spring 标准(6 位 / 7 位,工业最常用)

1)6 位(无年份,@Scheduled 默认) 秒 分 时 日 月 星期 2)7 位(带年份,复杂调度) 秒 分 时 日 月 星期 年 字段规则:

  1. 秒:0–59
  2. 分:0–59
  3. 时:0–23
  4. 日期:1–31
  5. 月份:1–12 / JAN~DEC
  6. 星期:1–7(1 = 周日,7 = 周六),与日期互斥,需用?占位
  7. 年份(可选):2000–2099

三、核心通配符(通用)

表格

符号 作用
* 匹配该字段所有值
? 无指定,仅用于「日 / 星期」二选一,避免冲突
/ 步长,定义间隔执行
- 连续时间范围
, 多值枚举,多个时间点
L 最后一天 / 最后一个星期
W 最近工作日
# 每月第 N 个星期

四、核心特性

  1. 高精度:支持秒级、分钟级、日月周年多级周期调度;
  2. 表达能力强:可组合范围、间隔、特殊日期(月末、每月第 2 周三等);
  3. 跨平台通用:几乎所有定时中间件、开发框架均兼容;
  4. 轻量化:仅字符串配置,无需额外时间配置文件;
  5. 互斥约束:Quartz 规范中日期、星期不能同时赋具体值,一个填数字另一个必须写?

五、适用场景

  1. 后端定时任务:数据同步、报表生成、缓存清理、日志归档;
  2. 服务器运维:定时备份、巡检脚本、服务重启;
  3. 大数据调度:定时拉取数据、定时计算任务;
  4. 业务系统:定时推送消息、定时账单结算、定时过期清理。

六、优缺点

优点

  • 语法简洁,一条表达式覆盖复杂周期;
  • 无时区额外配置时默认服务器本地时间;
  • 生态成熟,在线校验工具多,调试方便。

缺点

  1. 学习成本,符号规则易混淆(星期取值两套标准);
  2. 不支持「间隔时长偏移」(如程序启动后每 10 分钟执行,需用 fixedRate);
  3. 无法直接表达「每月最后一个工作日」等复杂组合;
  4. 不支持跨时区简易配置,多时区场景需额外处理。

七、补充区分

  • Cron:固定日历时间调度(每天 8 点、每周一、每 5 分钟);
  • 框架内置 fixedRate/fixedDelay:固定间隔调度(启动后每 5 分钟执行,不受日历日期约束),不属于 Cron 范畴。

更多推荐