Cron表达式
Cron表达式是一种用于描述定时任务执行时间的字符串格式,在Unix、Linux、Mac OS X等操作系统中被广泛使用。它通过一系列的时间字段来描述一个定时任务应该在哪些时间点执行。
它通常由6~7位组成,年份可以省略。每个时间字段都可以是数字、星号、逗号、减号、正斜杠和问号这些特殊字符的组合。
基本语法
Cron的各个字段含义及取值范围
位数 | 含义 | 取值范围 |
1 | 秒 | 0~59(5位的时候,可以省略) |
2 | 分 | 0~59 |
3 | 时 | 0~23 |
4 | 日 | 1-31 |
5 | 月 | 1-12 |
6 | 星期 | 0-6(0表示周日) |
7 | 年 |
|
每个字段,可以用特殊的字符来表示一些特定的取值。
* | 匹配所有的值。在分钟、小时、日期、月份和星期中使用时,表示“每个”或“任何” |
? | 只能在日期和星期中使用,表示“无意义”或“不适用”。例如,如果您想在每月的第一天执行任务,但无论这一天是星期几,可以将日期字段设置为1 ,将星期字段设置为? |
- | 指定一个范围。例如,1-5 表示1到5的值 |
, | 指定多个值。例如,MON,WED,FRI 表示星期一、星期三和星期五 |
/ | 指定一个增量。例如,0/5 表示从0秒开始,每5秒执行一次 |
L | 只能在日期和星期中使用。在日期字段中,表示这个月的最后一天;在星期字段中,表示这个月的最后一个星期几。例如,L 在日期字段中表示每个月的最后一天,5L 表示这个月的最后一个星期五 |
W | 只能在日期字段中使用,表示最近的工作日(周一至周五)。“W”可以和具体的日期或者“L”连用,例如15W 表示这个月的第15个工作日,LW 表示这个月的最后一个工作日 |
# | 只能在星期字段中使用,表示这个月的第几个星期几。例如,2#1 表示这个月的第一个星期二 |
注意:在Cron表达式中,要保证各个字段的取值之间没有冲突,否则定时任务可能无法按照预期执行。
常见表达式示例
|
每天6点执行一次 |
|
每小时第30分钟执行一次 |
|
每隔5分钟执行一次 |
|
每月的第一天早上7点执行一次 |
|
每周的周日下午3点执行一次 |
|
每年的1月1日早上5点执行一次 |
|
每个工作日早上8点到下午5点之间,每隔30分钟执行一次 |
表达式的高级用法
使用通配符
通配符可以在任何字段中使用,表示匹配所有可能的值。在分钟和小时字段中,""表示匹配0到59和0到23的所有值,而在日和月字段中,""表示匹配1到31和1到12的所有值。在周几字段中,"*"表示匹配0到6,其中0表示周日,1表示周一,以此类推。
使用时间增量
时间增量可以在任何字段中使用,表示从指定的起始时间开始,每隔一定时间执行任务。在分钟和小时字段中,"/"后面的数字表示增量,例如"/5"表示每隔5分钟执行一次任务。在日和月字段中,"/"后面的数字表示间隔的天数或月数,例如"/2"表示每隔2天执行一次任务。在周几字段中,"/"后面的数字表示间隔的周数,例如"*/3"表示每隔3周执行一次任务。
使用将多个表达式组合
可以使用逗号和连字符将多个表达式组合在一起,以指定更复杂的时间表。例如,"0 8-12,14-18 * * *"表示每天的8:00到12:00和14:00到18:00之间执行任务。另外,可以使用括号来分组表达式,以便更精细地控制任务的执行时间。例如,"(0 10 * * 1-5),(0 16 * * 1-5)"表示每周一至周五的10:00和16:00执行任务。
当然,如果忘记了cron规则,可以用在线工具:https://cron.qqe2.com/。