Cron表达式语法详解

掌握Cron表达式语法

一、Cron五字段结构

Cron表达式是一种用于配置定时任务的时间表达式,广泛应用于Unix/Linux系统的crontab、Spring框架的@scheduled注解、云平台的定时触发器以及各类调度工具中。掌握Cron表达式是进行自动化任务调度的基础技能。

标准的五字段Cron表达式格式如下:

每个字段使用数字或特殊字符表示取值范围,字段之间用空格分隔。整体语法格式为:

分钟 小时

各字段的详细取值范围和说明如下:

字段取值范围说明
分钟(Minute)0 - 59指定每小时的第几分钟执行任务
小时(Hour)0 - 23指定每天的第几小时执行任务
日(Day of Month)1 - 31指定每月的第几天执行任务
月(Month)1 - 12指定每年的第几月执行任务
周(Day of Week)0 - 7指定每周的第几天执行任务,0和7均表示星期日
提示:"日"和"周"两个字段是"或"的关系。当两个字段都指定了具体的值(非 *)时,只要满足其中一个条件就会触发任务执行。例如 0 0 1 * 0 表示每月1日或每周日0点都会执行。

二、特殊字符详解

Cron表达式支持多种特殊字符(通配符),用于灵活定义执行时间。以下逐一说明每个特殊字符的含义和用法:

字符名称含义示例
*星号所有可能的值,表示该字段的每一个合法值0 * * * * 每小时整点执行
,逗号列举多个值,用于指定多个离散的取值0 9,18 * * * 每天9:00和18:00执行
-连字符指定一个范围(包含两端),表示从起点到终点的连续区间0 9-17 * * * 每天9点到17点整点执行
/斜杠步长,表示从起始值开始每隔指定单位执行一次*/5 * * * * 每5分钟执行一次
LLast最后,在"日"字段中表示月的最后一天;在"周"字段中表示周的最后一天(星期六)0 0 L * * 每月最后一天0点执行
WWeekday工作日,仅用于"日"字段,表示距离指定日期最近的工作日(周一至周五)0 0 15W * * 每月15号最近的工作日执行
#第几个仅用于"周"字段,格式为"周几#第几个",表示某个月的第几个星期几0 0 * * 3#2 每月的第2个星期三执行

特殊字符的组合使用可以构建出几乎任何时间粒度的调度规则。以下是一些组合使用的具体说明:

三、常用Cron表达式示例

以下列举了实际开发中最为常用的Cron表达式,覆盖了从高频到低频的各种调度场景:

Cron表达式含义
* * * * *每分钟执行一次(最频繁的调度)
*/5 * * * *每5分钟执行一次
*/10 * * * *每10分钟执行一次
0 * * * *每小时整点执行(0分0秒时触发)
0 9 * * *每天9:00执行
0 9 * * 1-5工作日(周一至周五)9:00执行
*/10 8-18 * * *每天8:00到18:00之间,每10分钟执行一次
0 0 1 * *每月1日0:00执行
0 0 1 1 *每年1月1日0:00执行(年度任务)
0 0,12 * * *每天0:00和12:00执行
0 9 * * 1,3,5每周一、三、五的9:00执行
0 0 L * *每月最后一天0:00执行
0 9 15W * *每月15号最近的工作日9:00执行
0 0 * * 3#2每月的第2个星期三0:00执行

四、Cron表达式的最佳实践

在生产环境中合理使用Cron表达式,可以有效避免资源竞争和系统负载波动。以下是一些经过验证的最佳实践:

五、Claude Code中的Cron注意事项

在Claude Code中使用Cron表达式调度定时任务时,需要注意以下与标准Cron实现的差异和特殊处理规则:

时区规则:Claude Code的Cron调度使用本地时间(Local Time),而非UTC时间。这意味着表达式的计算基于用户系统设置的时区。
注意:在编写Cron表达式时,建议始终在代码注释中写明表达式的预期执行时间,方便团队其他成员理解和维护。例如:0 9 * * 1-5 # 北京时间工作日9:00执行