概述
cron 表达式是一个字符串,该字符串由 6
个空格分为 7
个域,每一个域代表一个时间单位。格式如下:
[秒] [分] [时] [日] [月] [周] [年]
通常定义 “年” 的部分可以省略,实际常用的由 前六部分组成
**
CRON中时间元素的说明
关于 cron 的各个域的定义如下表格所示:
时间元素 | 有效数值范围 | 可使用的通配符 |
---|---|---|
秒 | 0-59 | , - * / |
分 | 0-59 | , - * / |
时 | 0-23 | , - * / |
日 | 1-31 | , - * ? / L W |
月 | 1-12 或 JAN-DEC | , - * / |
周 | 1-7 或 SUN-SAT | , - * ? / L # |
年 | 1970-2099 | , - * / |
cron中的通配符
CRON格式中特殊字符说明
字符 | 作用 | 举例 |
---|---|---|
, | 列出枚举值 | 在 “分” 中定义为 8,12,35 ,则表示分别在第 8 分,第 12 分 第 35 分执行该定时任务。 |
- | 表示触发范围 | 在“分”中使用5-10,表示从5分到10分钟每分钟触发一次 在 “时” 这个域中定义 1-6,则表示在 1 到 6 点之间每小时都触发一次 |
* | 表示所有值,可解读为 “每” | 在分域使用, 表示每分钟都会触发一次 如果在“日”这个域中设置 ``,表示每一天都会触发 |
/ | 表达式分为两个部分,其中第一部分是起始值,第二部分是固定时间,起始时间开始触发,每隔固定时间触发一次, | 在Minutes域使用5/10,表示5分时触发一次,每10分钟再触发一次 |
? | 在DayofMonth和DayofWeek中,用于匹配任意值 | 在DayofMonth域使用?,表示每天都触发一次 要在每月的 8 号触发一个操作,但不关心是周几,我们可以这么设置 0 0 0 8 * ? |
# | 在DayofMonth中,确定第几个星期几,只能作用于 “周” | 1#3表示第三个星期日 |
L | 英文中的LAST 的意思,表示最后, 只能在 “日”和“周”中使用 |
在DayofWeek中使用5L,表示在最后一个星期四触发 在“日”中设置,表示当月的最后一天(依据当前月份,如果是二月还会依据是否是润年), 在“周”上表示周六 |
W | 表示有效工作日(周一到周五) | 在DayofMonth使用5W,如果5日是星期六,则将在最近的工作日4日触发一次 |
示例
下面给出一些示例,可根据上面的解释进行练习解读:
- 每隔 1 分钟执行一次:0 /1 ?
- 每天 23 点执行一次:0 0 23 ?
- 每月 1 号凌晨 1 点执行一次:0 0 1 1 * ?
- 每月最后一天 23 点执行一次:0 0 23 L * ?
- 每周星期天凌晨 1 点实行一次:0 0 1 ? * L
- 在 26 分、29 分、33 分执行一次:0 26,29,33 * ?
其实CRON表达式无需多记,需要使用的时候直接使用在线生成器就可以了,地址:https://cron.qqe2.com/