· 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 个周五