一次讲清楚Linux Cron和 Spring Cron

定时任务是我们日常开发中经常用到的一个功能点,无论是Linux服务器上Crontab还是Spring task schedule,都会使用到cron表达式去实现定时任务的配置。不过,一定要注意,Linux cron表达式和Spring的cron表达式不一样,下面来一次讲清楚。

一,Linux cron表达式

1,长度: 5 位 (中间有一个空格)

2,字段含义和取值

一次讲清楚Linux Cron和 Spring Cron_第1张图片

分 时 天 月 周

在以上各个字段中,还可以使用以下特殊字符:

  • "*"代表所有的取值范围内的数字,如月份字段为*,则表示1到12个月;
  • "/"代表每一定时间间隔的意思,如分钟字段为*/10,表示每10分钟执行1次。
  • "-"代表从某个区间范围,是闭区间。如“2-5”表示“2,3,4,5”,小时字段中0-23/2表示在0~23点范围内每2个小时执行一次。
  • ","分散的数字(不一定连续),如1,2,3,4,7,9。
  • cron默认每1分钟扫描一次,全为*即为每分钟一次
  • 月字段还可以为字母L,表示每月最后一天

注:由于各个地方每周第一天不一样,因此Sunday=0(第一天)或Sunday=7(最后1天)。

3,示例

示例:

每一分钟执行一次command(因cron默认每1分钟扫描一次,因此全为*即可)

*    *    *    *    *  command

每小时的第3和第15分钟执行command

3,15   *    *    *    *  command

每天上午8-11点的第3和15分钟执行command:

3,15  8-11  *  *  *  command

每隔2天的上午8-11点的第3和15分钟执行command:

3,15  8-11  */2  *   *  command

每个星期一的上午8点到11点的第3和第15分钟执行command

3,15  8-11   *   *  1 command

每晚的21:30重启smb

30  21   *   *  *  /etc/init.d/smb restart

每月1、10、22日的4 : 45重启smb

45  4  1,10,22  *  *  /etc/init.d/smb restart

每周六、周日的1 : 10重启smb

10  1  *  *  6,0  /etc/init.d/smb restart

每天18 : 00至23 : 00之间每隔30分钟重启smb

0,30  18-23  *  *  *  /etc/init.d/smb restart

每一小时重启smb

*  */1  *  *  *  /etc/init.d/smb restart

晚上11点到早上7点之间,每隔一小时重启smb

*  23-7/1  *   *   *  /etc/init.d/smb restart

每月的4号与每周一到周三的11点重启smb

0  11  4  *  mon-wed  /etc/init.d/smb restart

每小时执行/etc/cron.hourly目录内的脚本

0  */1   *   *   *  root run-parts /etc/cron.hourly

二,Spring cron表达式

1,长度:6 位 (中间有一个空格)

2,字段含义和取值

一次讲清楚Linux Cron和 Spring Cron_第2张图片

秒 分 时 天 月 周 

 注意: 和Linux cron的区别就是多一个秒的配置

  • 字段可能是一个星号*,它表示该字段可以使用的所有范围。对于周或天字段,可以使用问号(?)代替星号

  • ","分散的数字(不一定连续),如1,2,3,4,7,9

  • "-"代表从某个区间范围,是闭区间。如“2-5”表示“2,3,4,5”,小时字段中0-23/2表示在0~23点范围内每2个小时执行一次

  • "/"代表每一定时间间隔的意思,如分钟字段为*/10,表示每10分钟执行1次。

  • 周字段和月字段可以是英文名(Monday,Friday,May,October这些),取前三个字母,忽略大小写

  • 天字段可以是L,表示月的最后一天; 如果是L-1,表示月的倒数第二天

  • 周字段也可以是L,表示周的最后一天

  • 周字段可以使nL,表示每月最后的周n

  • 天字段可以是nW,表示每个月的第n周

  • 天字段可以是LW,表示每个月的最后的一周

  • 周字段可以是d#n,表示一个月的第n周的第d天

3,示例

0 0 * * * *

每天的零时零分

*/10 * * * * *

每10秒

0 0 8-10 * * *

每天8点,9点,10点

0 0 6,19 * * *

每天6点正和19点正

0 0/30 8-10 * * *

每天8:00, 8:30, 9:00, 9:30, 10:00, 10:30

0 0 9-17 * * MON-FRI

周一到周五的9点到17点

0 0 0 25 DEC ?

圣诞夜零时

0 0 0 L * *

每个月最后一天零时

0 0 0 L-3 * *

每月倒数第4天零时

0 0 0 * * 5L

每月最后的周五零时

0 0 0 * * THUL

每月最后的周四零时

0 0 0 1W * *

每月第一周的零时

0 0 0 LW * *

每月最后一周的零时

0 0 0 ? * 5#2

每个月的第二周的周五的午夜零时

0 0 0 ? * MON#1

每个月的第一个周一的午夜零时

4,注解用法

上面这些示例,都是在注解@Scheduled(cron = "0 0 0 LW * *") 中使用,还有一些快捷的方式,用法如:@Scheduled(cron = "@hourly")

@yearly (or @annually)

0 0 0 1 1 *

@monthly

0 0 0 1 * *

@weekly

0 0 0 * * 0

@daily (or @midnight)

0 0 0 * * *

@hourly

0 0 * * * *

码字不易,记得点赞关注哟

你可能感兴趣的:(微服务&Spring,Linux,linux,运维,服务器,spring,java)