Skip to content

Cron 表达式语法指南

来源: 网络资料整理
整理日期: 2026-03-24

概述

Cron 表达式是 Unix/Linux 系统中用于定时任务调度的标准语法,广泛应用于 crontab、Quartz Scheduler、AWS EventBridge 等各种调度系统。它是一个由空格分隔的字符串,通过特定格式定义任务的执行时间规则。

表达式结构

标准 5 字段格式(Linux/Unix crontab)

* * * * *
│ │ │ │ │
│ │ │ │ └── 星期 (0-7, 0 和 7 都表示周日)
│ │ │ └──── 月份 (1-12)
│ │ └────── 日期 (1-31)
│ └──────── 小时 (0-23)
└────────── 分钟 (0-59)

扩展 6/7 字段格式(Quartz 等框架)

* * * * * * [Year]
│ │ │ │ │ │
│ │ │ │ │ └── 星期 (1-7 或 SUN-SAT)
│ │ │ │ └──── 月份 (1-12)
│ │ │ └────── 日期 (1-31)
│ │ └──────── 小时 (0-23)
│ └────────── 分钟 (0-59)
└──────────── 秒 (0-59)

特殊字符详解

字符名称含义示例
*星号匹配任意值* * * * * 每分钟执行
,逗号列表分隔,指定多个值0,30 * * * * 每小时的 0 分和 30 分执行
-连字符指定范围9-17 * * * * 9 点到 17 点每小时执行
/斜杠步长,指定间隔*/5 * * * * 每 5 分钟执行
?问号不指定(用于解决日期和星期冲突)0 0 1 * ? 每月 1 号执行,不关心星期几
LLast最后0 0 L * * 每月最后一天执行
WWeekday最近工作日0 0 15W * * 每月 15 日最近的工作日
#井号第几个星期几0 0 * * 1#2 每月第 2 个周一

常用示例

基础周期

cron
# 每分钟执行
* * * * *

# 每 5 分钟执行
*/5 * * * *

# 每小时执行(整点)
0 * * * *

# 每 2 小时执行
0 */2 * * *

每日任务

cron
# 每天凌晨 2 点执行
0 2 * * *

# 每天早上 8 点 30 分执行
30 8 * * *

# 每天中午 12 点和晚上 6 点执行
0 12,18 * * *

每周/每月任务

cron
# 每周一早上 8 点执行
0 8 * * 1

# 每月 1 号凌晨执行
0 0 1 * *

# 每月最后一个周五下午 5 点执行
0 17 * * 5L

工作日任务

cron
# 工作日(周一到周五)每天早上 9 点执行
0 9 * * 1-5

# 工作日每 2 小时执行
0 */2 * * 1-5

平台差异说明

平台字段数星期范围特殊说明
Linux crontab50-7 (0/7=周日)标准 Unix 格式
Quartz (Java)6 或 71-7 (1=周日)包含秒和可选年份
AWS EventBridge61-7 (1=周日)支持年字段
Spring Scheduler60-6 (0=周日)类似 Quartz

重要注意事项

1. 日期与星期的冲突

当同时指定了日期星期时,它们之间是**"或"**的关系。如果只想按其中一个条件触发,另一个字段应使用 ? 表示不指定。

cron
# 错误:每月 1 号且是周一才执行(很少符合预期)
0 0 1 * 1

# 正确:每月 1 号执行(不管星期几)
0 0 1 * ?

# 正确:每周一执行(不管几号)
0 0 ? * 1

2. 时区问题

Cron 表达式本身不包含时区信息,实际执行时间取决于运行环境的系统时区。在分布式系统或云服务中,务必确认:

  • 服务器时区设置
  • 容器/函数计算的默认时区
  • 是否需要显式指定时区

3. 执行频率限制

  • 最小粒度通常为 1 分钟(标准 crontab)
  • 部分系统支持秒级调度(如 Quartz)
  • 过于频繁的调度(如每秒执行)可能导致性能问题

验证工具推荐

参考来源