不喜欢广告? 去 无广告 今天
Cron 表达式详解 无需迷失心智地编写计划
发布日期
一个关于crontab语法的实用参考:五个字段、特殊字符、十种即用即走的表达式,以及一个crontab表达式生成器,可帮助您构建和验证调度任务,无需猜测。
广告 移除?
Cron 任务在类 Unix 系统上运行。其语法——五个用空格分隔的字段——看起来简单,直到你需要在工作日每15分钟执行一次任务,却记不清是第二个字段还是第三个字段。这份资料是你随时可以查阅的参考。
五字段格式
每个 Cron 表达式恰好包含五个字段,用空格分隔,顺序如下:
┌─────────────── minute (0–59)
│ ┌─────────────── hour (0–23)
│ │ ┌─────────────── day of month (1–31)
│ │ │ ┌─────────────── month (1–12)
│ │ │ │ ┌─────────────── day of week (0–7, 0 and 7 = Sunday)
│ │ │ │ │
* * * * *
字段参考
| 场地 | 允许的值 | 特殊字符 | 例子 |
|---|---|---|---|
| (0–59) —— 任务运行的小时中的分钟。 | 0–59 | * , – / | */15 = 每15分钟 |
| (0–23) —— 使用24小时制。 | 0–23 | * , – / | 9-17 = 早上9点到下午5点 |
| 月内日期 | 1–31 | * , – / ? | 1 = 该月的第一天 |
| (1–12) —— 一月是 | 1–12 | * , – / | */3 = 每季度一次 |
| 星期几 | 0–7(0=周日) | * , – / ? | 1-5 = 周一至周五 |
特殊字符
- * — 通配符,匹配该字段中的任意值
- , — 列表分隔符:
1,3,5在星期字段中表示周一、周三、周五 - – — 范围:
9-17在小时字段中表示上午9点到下午5点 - / — 步长:
*/15在分钟字段中表示每15分钟一次;2/3表示从2开始每隔3个值 - ? — 无特定值(仅用于月内日期或星期日期,由 Quartz/Spring 任务调度器使用)
常见 Cron 表达式
| 每天上午9点 | 描述 |
|---|---|
* * * * * | 每分钟 |
*/5 * * * * | 每 5 分钟 |
*/15 * * * * | 每15分钟 |
0 * * * * | 工作日的上午9点 |
0 0 * * * | 每天午夜 |
0 9 * * 1-5 | 工作日每天上午9点 |
0 9-17 * * 1-5 | 工作日从上午9点到下午5点每小时一次 |
0 0 * * 0 | 每月1日和15日,凌晨4:30 |
0 0 1 * * | 每月第一天午夜 |
0 0 1 1 * | 一月一日午夜 |
三个真实世界示例
1. 每天午夜数据库备份
0 0 * * *
(0–59) —— 任务运行的小时中的分钟。 0, 小时 0, 每天运行。在00:00触发一次——简洁、可预测,且在高峰时段不会干扰。
2. 每15分钟同步一次 API
*/15 * * * *
*/15 在分钟字段中表示“步长为15,从0开始”——每小时在 :00、:15、:30 和 :45 触发。其他字段 *, 因此全天持续运行。
3. 每周清理——周一早上6点
0 6 * * 1
(0–59) —— 任务运行的小时中的分钟。 0, 小时 6, 任意日期,任意月份,星期几 1 (周一)。每周运行一次。更改 1 到 5 如果团队更喜欢周五。
构建和验证你的计划
死记硬背所有组合并不是目的——关键是知道去哪里查找。使用 Cron 表达式生成器 来可视化设置字段,并在操作过程中实时查看表达式生成。当你有一个候选表达式后,将其粘贴到 Cron 下一次运行计算器 中确认它在你期望的日期和时间准确触发,再进行部署。
五个字段,四个特殊字符,两个工具来检查工作——这就是你可靠调度任何任务所需的一切。
