dob
← 全部笔记

· Linux

Cron 表达式:5 位和 6 位不是同一套尺子

Linux crontab 是 5 位,Spring / Quartz 是 6 到 7 位。日和周不要同时写星号。

两套标准

**Linux crontab 是 5 位:**分 时 日 月 周。没有秒,也没有年。例如 0 5 * * 0 是每周日 5:00。

**Spring / Quartz 是 6 到 7 位:**秒 分 时 日 月 周 [年]。例如 0 0 5 * * 0 才是每周日 5:00:00。

把 Quartz 的表达式直接丢进 crontab,第一段会被当成「分钟」。

通配符

符号 含义 例子
* 所有值 分位 * = 每分钟
? 不指定,只用于日和周 0 0 12 20 * ?
/ 步长 */5 每 5 个;0/15 从 0 起每 15
- 范围 9-17
, 枚举 8,12,18
L 最后(日 / 周) L 月末;6L 本月最后一个周五
# 第几个星期几 6#3 第 3 个周五

容易踩的规则

  • */N 和 0/N 等价。
  • 起始值加步长超出范围,就只触发一次。分位写 40/20,一小时里只有第 40 分钟。
  • 日和周会互相影响。指定了一个,另一个在 Quartz 里要用 ?,不要再用 *。
  • ? 和 * 在日 / 周位不是一回事:* 是「每一个」,? 是「我不管」。
  • Linux cron 的日是 1–31,月是 1–12。写 0 无效。

常见例子(Quartz 6 位)

0 0 12 * * ?          每天中午 12 点
0 */5 * * * ?         每 5 分钟
0 0 8,12,18 * * ?     每天 8 / 12 / 18 点
0 0 9-17 * * ?        每天 9 点到 17 点,整点
0 0 0 L * ?           每月最后一天 0 点
0 0 0 ? * 6#3         每月第 3 个周五