cron表达式

AffettoIris 2023-11-22 2,373 11/22

 

cron表达式

不知道你在玩游戏的时候是否发现过以下情况,玩某些游戏的时候,发现他的排行榜并不是时时更新的,而是每半个小时,或者一个小时更新一次;又比如很火的王者荣耀手游,它的日常任务,都是每天5点进行更新。那么,这些时间控制,到底是由谁控制得如此精准呢?原来,这些都是corn表达式的功劳。可见cron是控制定时任务的时间表达式。我之前搞京东脚本的定时任务时弄过cron表达式,ARL也用到了cron表达式。

cron表达式

*/5 * * * * ? #每隔 5 秒执行一次

0 */1 * * * ? #每隔 1 分钟执行一次
0 0 2 1 * ? * #每月 1 日的凌晨 2 点执行一次
0 15 10 ? * #MON-FRI 周一到周五每天上午 10:15 执行
0 15 10 ? 6L #2002-2006 2002 年至 2006 年的每个月的最后一个星期五上午 10:15 执行
0 0 23 * * ? #每天 23 点执行一次
0 0 1 * * ? #每天凌晨 1 点执行一次
0 0 1 1 * ? #每月 1 日凌晨 1 点执行一次
0 0 23 L * ? #每月最后一天 23 点执行一次
0 0 1 ? * L #每周星期天凌晨 1 点执行一次
0 26,29,33 * * * ? #在 26 分、29 分、33 分执行一次
0 0 0,13,18,21 * * ? #每天的 0 点、13 点、18 点、21 点都执行一次
0 0 10,14,16 * * ? #每天上午 10 点,下午 2 点,4 点执行一次
0 0/30 9-17 * * ? #朝九晚五工作时间内每半小时执行一次
0 0 12 ? * WED #每个星期三中午 12 点执行一次
0 0 12 * * ? #每天中午 12 点触发
0 15 10 ? * * #每天上午 10:15 触发
0 15 10 * * ? #每天上午 10:15 触发
0 15 10 * * ? * #每天上午 10:15 触发
0 15 10 * * ? #2005 2005 年的每天上午 10:15 触发
0 * 14 * * ? #每天下午 2 点到 2:59 期间的每 1 分钟触发
0 0/5 14 * * ? #每天下午 2 点到 2:55 期间的每 5 分钟触发
0 0/5 14,18 * * ? #每天下午 2 点到 2:55 期间和下午 6 点到 6:55 期间的每 5 分钟触发
0 0-5 14 * * ? #每天下午 2 点到 2:05 期间的每 1 分钟触发
0 10,44 14 ? 3 WED #每年三月的星期三的下午 2:10 和 2:44 触发
0 15 10 ? * MON-FRI #周一至周五的上午 10:15 触发
0 15 10 15 * ? #每月 15 日上午 10:15 触发
0 15 10 L * ? #每月最后一日的上午 10:15 触发
0 15 10 ? * 6L #每月的最后一个星期五上午 10:15 触发
0 15 10 ? * 6L #2002-2005 2002 年至 2005 年的每月的最后一个星期五上午 10:15 触发
0 15 10 ? * 6#3 #每月的第三个星期五上午 10:15 触发

cron表达式案例解读

  • Cron="0 */5 * * * ?"

    秒位0,分位*/5,每5分0秒执行一次;

  • Cron="0 30 8,10,12,14,16,18,21 * * ?"

    秒位0,分位30,时位为一串集合,则它的意思是每天 8点30分0秒、10点半、12点半、14点半、16点半、21点半各执行一次;

  • Cron="0 0 */1 * * ?"

    每个小时的0分0秒(整点)执行一次。

cron表达式组成规则

有6或7个字段,分别是"秒 分 时 日 月 周 年",“年”是可选的。

参见上述解读,可见数字则表示具体时间,* 则表示任意时间,

周的特殊写法

七天分别是SUN、MON、TUE、WED、THU、FRI、SAT,例如周位MON-FRI表示周一到周五。其实周位还可以是数字1到7,但是SUN = 1、MON = 2;、...、SAT = 7,容易记混。

/前后是分别是值的起始和增加幅度

  • */5 则表示每(*)隔(/)多少(5)时间

  • 秒位是3/5,是每分钟的第3秒开始,每隔5秒生效一次,也就是第3秒、8秒、13秒,以此类推。

还可以用集合表示具体的几个时间点:

  • ,:时位8,10,12表示8点、10点、12点

  • -:时位9-18表示9点到18点。

?仅用于【日】和【周】字段,其中一个字段被指定了具体值而非*以后,为了避免冲突,标识不生效的字段。

比如【0 0 10 15 * ?】就代表每月15号10:00:00触发任务,如果指定周为WED的话,这每月15号还不一定是周三呢。

L:L寓意last,仅用于【日】【周】字段(用的少还不好记)

  • 用于日字段:直接使用L代表每个月的最后一天。也支持偏移量的方式,配置[L-1]则代表每月的倒数第二天。

  • 用于周字段:直接使用L代表每周的最后一天(西方的每周最后一天是SAT,不是周日),也就是等效于[7]或[SAT],但是如果配合上数字,比如[7L],则代表每个月最后一个周六,等效于[SATL]。目前Quartz支持。

一些在线cron表达式生成器

cron表达式

很方便,他们是按七个槽位分七个栏,每栏指定该槽位的值。提供上图四种指定值的方式。

- THE END -

AffettoIris

11月22日20:54

最后修改:2023年11月22日
1

非特殊说明,本博所有文章均为博主原创。

共有 0 条评论