字段与取值范围
| 字段 | 取值 | 说明 |
|---|
| 秒 | 0–59 | 仅 Quartz、Spring 和 6 字段 Cron |
| 分钟 | 0–59 | crontab 和 AWS 中的第一个字段 |
| 小时 | 0–23 | 24 小时制 |
| 日 | 1–31 | Quartz、Spring、AWS 支持 L、W 和 LW |
| 月 | 1–12 或 JAN–DEC | 英文缩写不区分大小写 |
| 星期 | 0–7 或 SUN–SAT | Quartz 和 AWS:1–7,1 = 星期日 |
| 年 | 1970–2199 | Quartz 中可选,AWS 中必填 |
特殊字符
| 符号 | 含义 | 示例 |
|---|
| * | 任意值 | * * * * * — 每分钟 |
| , | 值列表 | 0 9,17 * * * — 09:00 和 17:00 |
| - | 范围 | 0 9 * * 1-5 — 工作日 09:00 |
| / | 步长 | */15 * * * * — 每 15 分钟 |
| ? | 不指定值(日期字段) | 0 0 12 ? * MON — Quartz |
| L | 最后一天 / 最后一个星期几 | 0 0 0 L * ? — 每月最后一天 |
| W | 最近的工作日 | 0 0 9 15W * ? — 离 15 日最近的工作日 |
| # | 当月第 n 个星期几 | 0 0 9 ? * 2#1 — 第一个星期一 |
宏
| 宏 | 标准 crontab |
|---|
| @yearly / @annually | 0 0 1 1 * |
| @monthly | 0 0 1 * * |
| @weekly | 0 0 * * 0 |
| @daily / @midnight | 0 0 * * * |
| @hourly | 0 * * * * |
阅读顺序
从最小的时间单位读到最大的:30 2 * * 1 表示在任意日、任意月、且星期为一时的 2 点 30 分——也就是每周一 02:30。Quartz 和 Spring 要在前面加上秒字段,AWS 要在最后加上年字段。
常见陷阱
分钟字段中的 */7 并不是“永远每 7 分钟一次”:它在每个小时重新开始,所以会在 0、7……56 分触发,然后又回到 0 分。在 crontab 中同时限定两个日期字段时,只要其一匹配就会运行。而在 Quartz 和 AWS 中,星期字段的 0 是无效值,因为一周从 1 开始。
常见问题
- Cron 字段的顺序是什么?
- 分钟、小时、日、月、星期。Quartz 和 Spring 在前面加秒,AWS 在最后加年。
- Cron 中的问号是什么意思?
- 表示“不指定值”。Quartz 和 AWS 要求在两个日期字段之一使用它;标准 crontab 不接受问号。
- 如何写“每 90 分钟一次”?
- 如果间隔不能整除小时或天,一行 Cron 无法表达。可以用两条,例如 0 0-21/3 * * * 和 30 1-22/3 * * *。
- 月份和星期的英文缩写区分大小写吗?
- 不区分。在本站涵盖的所有方言中,JAN、Jan 和 jan 都是等价的。