CRON 表达式参考手册
本手册涵盖 标准 Unix CRON 和 扩展 CRON(支持秒) 的语法、示例及不同系统的支持情况,适用于 Linux、Spring、Quartz 等调度任务配置。
1. CRON 表达式基础
1.1 标准 Unix CRON(5/6 字段,不支持秒)
语法:
* * * * * [command]
│ │ │ │ │
│ │ │ │ └── 星期几 (0-6, 0=周日)
│ │ │ └──── 月份 (1-12)
│ │ └────── 日 (1-31)
│ └──────── 小时 (0-23)
└────────── 分钟 (0-59)
示例:
表达式 | 说明 |
---|---|
* * * * * |
每分钟执行 |
*/5 * * * * |
每 5 分钟执行 |
0 * * * * |
每小时执行(整点) |
0 3 * * * |
每天 3:00 AM 执行 |
0 0 * * 0 |
每周日午夜执行 |
0 0 1 * * |
每月 1 号执行 |
0 9-17 * * 1-5 |
工作日(周一到周五)9AM-5PM 每小时执行 |
1.2 扩展 CRON(支持秒,7 字段)
语法(如 Spring/Quartz):
* * * * * * * [command]
│ │ │ │ │ │ │
│ │ │ │ │ │ └── 年(可选)
│ │ │ │ │ └──── 星期几 (0-6, 0=周日)
│ │ │ │ └────── 月份 (1-12)
│ │ │ └──────── 日 (1-31)
│ │ └────────── 小时 (0-23)
│ └──────────── 分钟 (0-59)
└────────────── 秒 (0-59)
示例:
表达式 | 说明 |
---|---|
*/10 * * * * * |
每 10 秒执行 |
0 */30 * * * * |
每 30 分钟执行(整点 + 30 分) |
0 0 * * * * |
每小时整点执行 |
0 30 9 * * * |
每天 9:30 AM 执行 |
0 0 12 * * ? |
每天中午 12 点执行(Quartz 风格) |
2. 特殊字符说明
字符 | 说明 | 示例 |
---|---|---|
* |
任意值 | * * * * * (每分钟) |
, |
多个值 | 0 3,15 * * * (3AM 和 3PM) |
- |
范围 | 0 9-17 * * * (9AM-5PM 每小时) |
/ |
间隔 | */5 * * * * (每 5 分钟) |
? |
不指定(仅用于日/周) | 0 0 * * ? (每天午夜) |
3. 不同系统的 CRON 支持
系统/工具 | 是否支持秒 | 示例 |
---|---|---|
Linux Cron | ❌ 不支持 | * * * * * |
Spring Cron | ✅ 支持 | 0/10 * * * * * (每 10 秒) |
Quartz Scheduler | ✅ 支持 | 0 */2 * * * ? (每 2 分钟) |
AWS CloudWatch | ❌ 不支持 | rate(5 minutes) |
Kubernetes CronJob | ❌ 不支持 | */5 * * * * |
4. 常见任务示例
4.1 标准 Unix CRON
任务 | 表达式 |
---|---|
每 30 分钟执行 | */30 * * * * |
每天 3:15 AM 执行 | 15 3 * * * |
每周一 8:00 AM 执行 | 0 8 * * 1 |
每月 1 号 0:00 执行 | 0 0 1 * * |
4.2 扩展 CRON(支持秒)
任务 | 表达式 |
---|---|
每 15 秒执行 | */15 * * * * * |
每 2 小时的第 30 分钟执行 | 0 30 */2 * * * |
每天 10:30:45 PM 执行 | 45 30 22 * * * |
5. 如何在 Linux 实现秒级任务?
标准 Linux Cron 不支持秒,但可以通过以下方式模拟:
方法 1:使用 sleep
# 每 30 秒执行一次(每分钟运行 2 次)
* * * * * /path/to/command
* * * * * sleep 30; /path/to/command
方法 2:使用 watch
watch -n 30 /path/to/command
6. 总结
- 标准 Unix CRON(5/6 字段)不支持秒,适用于 Linux 定时任务。
- 扩展 CRON(7 字段)支持秒,适用于 Spring、Quartz 等调度框架。
- 不同系统对 CRON 的支持不同,需根据环境选择合适的表达式。
推荐工具:
- Linux 定时任务 → 标准
crontab
- Java/Spring 任务 →
@Scheduled(cron = "0/10 * * * * *")
- 高级调度 → Quartz Scheduler
📌 提示: 在线 CRON 表达式生成器:
- Crontab Guru(标准 CRON)
- Spring Cron Generator(支持秒)