YIMI's Blog
笔记是一种心态!

CRON表达式

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 表达式生成器: