〇、关于Cron表达式
计划任务,是任务在约定的时间执行已经计划好的工作,这是表面的意思。在Linux中,我们经常用到 cron 服务器来完成这项工作。cron服务器可以根据配置文件约定的时间来执行特定的任务。
一、表达式组成
cron表达式是由若干数字、空格、符号按一定的规则,组成一组字符串,从而表达时间的信息。与正则表达式类似,都是一个字符串表示一些信息。
Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义。从左到右(用空格隔开):秒 分 小时 月份中的日期 月份 星期中的日期 年份,其中年份可以省略。
二、通配符
2.1 常用通配符
使用cron的场景下, - * / ? 这几个常用通配符可满足90%以上需求。
【*】:每的意思。在不同的字段上,就代表每秒,每分,每小时等。
【-】:指定值的范围。如 1-10,在秒字段里表示每分钟的第1到10秒,在分就是每小时的第1到10分钟,以此类推。
【,】:指定某几个值。如 2,4,5,在秒字段里表示每分钟的第2,第4,第5秒,以此类推。
【/】:指定值的起始和增加幅度。如 3/5,在秒字段就是每分钟的第3秒开始,每隔5秒生效一次,也就是第3秒、8秒、13秒,以此类推。
【?】:仅用于日、周字段。因为在指定某日和周几的时候,这两个值实际上是冲突的,所以需要用【?】标识不生效的字段。比如【0 1 * * * ?】就代表每年每月每日每小时的1分0秒触发任务。这里的周就没有效果了。
2.2 特殊通配符
所谓特殊通配符即一些有含义的字符或字符串,很少情况能使用到。
【SUN】:仅用于【周】字段,表示星期日。也可以用数字1设置。周日~周六与数字的分别对应关系如下:
SUN、MON、TUE、WED、THU、FRI、SAT
1 2、 3、 4、 5、 6、 7
目前Quartz支持。
【L】:即Last,用于【日】【周】字段。这里需要注意的是,在不同的字段的不同使用方式,其含义有所差别。
· 用于日字段:直接使用L代表每个月的最后一天。也支持偏移量的方式,配置[L-1]则代表每月的倒数第二天。
· 用于周字段:直接使用L代表每周的最后一天,也就是等效于[7]或[SAT],但是如果配合上数字,比如[7L],则代表每个月最后一个周六,等效于[SATL]。目前Quartz支持。
三、常用cron表达式示例
cron表达式 | 含义 | 常用场景 | 执行时间示例 |
---|---|---|---|
5 * * * * ? | 每分钟的第5秒执行一次 | 常见的每分钟的定时任务, 检查数据库和缓存数据是否一致 | 2021-04-11 13:10:05 2021-04-11 13:11:05 2021-04-11 13:12:05 2021-04-11 13:13:05 2021-04-11 13:14:05 2021-04-11 13:15:05 |
5 * 10-22 * * ? | 从早上10点到晚上十点, 每分钟的第5秒执行一次 | 将定时任务限制在每天的工作时间 | 2021-04-11 13:10:05 2021-04-11 13:11:05 2021-04-11 13:12:05 2021-04-11 13:13:05 2021-04-11 13:14:05 2021-04-11 13:15:05 |
5 0 0/6 * * ? | 等效于5 0 0,6,12,18 * * ? 每天从0点开始, 每隔6小时执行一次。 执行时间为第0分5秒 | 常用于每天较低频次的批量同步数据 | 2021-04-12 00:00:05 2021-04-12 06:00:05 2021-04-12 12:00:05 2021-04-12 18:00:05 |