Cron 表达式是在 Unix/Linux 系统上安排周期任务的标准方式。本指南涵盖最常用的 cron 模式和即用示例。
Cron 语法概览
标准 cron 表达式有 5 个字段:
┌───────────── 分钟 (0-59)
│ ┌─────────── 小时 (0-23)
│ │ ┌───────── 日 (1-31)
│ │ │ ┌─────── 月 (1-12)
│ │ │ │ ┌───── 星期 (0-7,0和7=周日)
│ │ │ │ │
* * * * * command_to_execute快速参考:常用 Cron 表达式
| Expression | Description |
|---|---|
* * * * * | Every minute |
*/5 * * * * | Every 5 minutes |
*/15 * * * * | Every 15 minutes |
*/30 * * * * | Every 30 minutes |
0 * * * * | Every hour (at minute 0) |
0 */2 * * * | Every 2 hours |
0 */6 * * * | Every 6 hours |
0 0 * * * | Daily at midnight |
0 6 * * * | Daily at 6:00 AM |
30 8 * * * | Daily at 8:30 AM |
0 0 * * 0 | Weekly (Sunday midnight) |
0 9 * * 1 | Every Monday at 9:00 AM |
0 9 * * 1-5 | Weekdays at 9:00 AM |
0 0 1 * * | First of every month (midnight) |
0 0 1 1 * | January 1st (midnight) |
0 0 1 */3 * | Every 3 months (quarterly) |
0 0 * * 1,4 | Monday and Thursday at midnight |
0 8-17 * * 1-5 | Every hour 8AM-5PM, weekdays |
特殊字符说明
*— * (星号) — 匹配该字段的每个可能值/— / (斜杠) — 步长值。*/5 表示"每5个单位",— , (逗号) — 值列表。1,3,5 表示"1、3和5"-— - (破折号) — 范围。1-5 表示"1到5"
Examples with special characters:
# Every 5 minutes
*/5 * * * *
# At minutes 0, 15, 30, 45 of every hour
0,15,30,45 * * * *
# Every weekday (Monday-Friday) at 9 AM
0 9 * * 1-5
# Every Monday and Friday at 6 PM
0 18 * * 1,5
# Every 3 hours on weekdays
0 */3 * * 1-5平台差异
Standard cron
标准 cron (crontab): 5 个字段
*/5 * * * * /path/to/script.shAWS EventBridge
AWS CloudWatch/EventBridge: 6 个字段,新增年份字段
cron(0/5 * * * ? *)GitHub Actions
GitHub Actions: 标准 5 字段,使用 UTC
schedule:
- cron: '*/5 * * * *'Kubernetes
Kubernetes CronJob: 标准 5 字段
spec:
schedule: "*/5 * * * *"常见错误
- 忘记时区 — Cron 默认使用系统时区。CI/CD 平台通常使用 UTC。
- 使用 * * * * *(每分钟)— 每天运行 1440 次,确保你真的需要!
- 混淆星期值 — 标准 cron 中周日是 0(或 7),某些系统是 1。
- 不记录输出 — 重定向输出:*/5 * * * * /script.sh >> /var/log/cron.log 2>&1
- 运行重叠 — 如果任务耗时超过间隔,使用 flock 或锁文件。
交互式测试你的 cron 表达式
Cron Expression Parser →FAQ
如何设置每5分钟运行?
使用 */5 * * * * — 分钟字段的 */5 表示"每第5分钟"。
0 0 * * * 是什么意思?
每天午夜(00:00)运行。第一个 0 是分钟,第二个 0 是小时。
如何在每周一上午9点运行?
使用 0 9 * * 1 — 分钟=0,小时=9,任意日,任意月,星期=1(周一)。
*/5 和 0/5 有什么区别?
标准 cron 中它们等价 — 都表示"每第5分钟"。AWS 等平台特别支持 0/5 语法。
可以同时指定日期和星期吗?
标准 cron 中,如果两者都设置(非*),任一匹配时任务就会运行。AWS CloudWatch 要求其中一个使用 "?"。