cron语法记录

遇到了好几次需要使用cron来做定时任务,但是长长的定时设置总是用完就忘,总是用一次忘一次。今天就来记录一下cron的语法。

公式

1
秒 分 时 日 月 周 [年]

Cron表达式总共有 7 个位置(秒 分 时 日 月 周 年),最后一个“年”通常省略,所以常见的配置只有六个位置。

语法清单

  • * - 所有值
    表示该字段的所有可能值。比如分钟位写 *,就是每分钟都触发。

  • ? — 不指定(仅用于“日”和“周”)
    表示不关心这个字段的值。只能用在日(第4位)和周(第6位),两个不能同时为 ?,必须一个指定另一个为 ?

  • x — 具体值
    精确指定一个数字,如 5 表示第5个单位。

  • x/xx — 步长/间隔
    从 x 开始,每 xx 单位执行一次,如 0/15 表示从0开始每15个单位。

  • x-y — 范围
    表示从 x 到 y 的连续范围。

  • x,y,z — 枚举/列表
    用逗号分隔多个值,表示在这些时间点都执行。

  • L — 最后(Last)
    表示该时间单位的最后一个值,主要用于“日”和“周”字段。在“日”字段表示当月最后一天,在“周”字段表示当周周六。

  • W — 工作日(Weekday)
    用于“日”字段,表示离指定日期最近的工作日(周一至周五)。

  • # — 第几个(仅用于“周”)
    用于“周”字段,格式为 星期几#第几个。

示例

分类 Cron 表达式 说明
基础 0 * * * * ? 每分钟执行
基础 0 0 * * * ? 每小时整点执行
基础 0 0 0 * * ? 每天零点执行
基础 0 0 0 1 * ? 每月1号零点执行
基础 0 0 0 1 1 ? 每年1月1日零点执行
基础 0 0 0 ? * 2 每周一零点执行(1=周日)
步长 0 0/5 * * * ? 每5分钟执行
步长 0/30 * * * * ? 每30秒执行
步长 5/15 * * * * ? 从第5秒起,每15秒执行
步长 0 0 0/2 * * ? 每2小时执行
步长 0 0 2/4 * * ? 从凌晨2点起,每4小时执行
范围 0 0 9-17 * * ? 9点到17点每小时整点执行
范围 0 0 0 1-7 * ? 每月1~7号零点执行
范围 0 0 8 ? * 2-6 周一至周五8点执行
列表 0 0 8,12,18 * * ? 每天8点、12点、18点执行
列表 0 0 0 1,15 * ? 每月1号和15号零点执行
列表 0 0 10 ? * 2,4,6 每周一、三、五10点执行
组合(范围+步长) 0 0/30 9-18 ? * 2-6 周一至周五9:00-18:00每半小时执行
组合(范围+步长) 0 15 8-20/2 * * ? 每天8:00-20:00每2小时在第15分钟执行
组合(列表+列表) 0 0 10,14,16 1,15 * ? 每月1号和15号的10点、14点、16点执行
组合(列表) 0 0 0 1 1,4,7,10 ? 每年1、4、7、10月的1号零点执行
组合(范围+步长) 0 0/15 9-17 ? * 2-6 周一至周五9:00-17:00每15分钟执行
特殊字符 L 59 59 23 L * ? 每月最后一天的23:59:59
特殊字符 LW 0 0 18 LW * ? 每月最后一个工作日18:00
特殊字符 W 0 0 9 15W * ? 每月15号最近的工作日9:00
特殊字符 # 0 0 12 ? * 2#1 每月第1个周一12:00
特殊字符 # 0 30 10 ? * 6#3 每月第3个周五10:30
特殊字符 L- 0 0 8 L-3 * ? 每月倒数第3天8:00