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 |