cron 表达式

雨点打透心脏的1/2处 2023-01-01 05:57 62阅读 0赞

cron 表达式其实就是一个字符串,通常以 5 或 6 个空格分隔开来,分为 6 或 7 个域,每一个域代表一个含义,有以下两种语法格式:

  • seconds minutes hours dayofmonth month dayofweek year(秒 分 时 天 月 周 年)
  • seconds minutes hours dayofmonth month dayofweek(秒 分 时 天 月 周)

以第一种表达式来说,其每个域的含义为:














































字段 允许值 允许的特殊字符
seconds(秒) 0~59的整数 , - / 四个字符
minutes(分) 0~59的整数 , - / 四个字符
hours(时) 0~23的整数 , - / 四个字符
dayofmonth(日期) 1~31的整数,实际使用时需要根据时间的月份的天数 , - ? / L W C 八个字符
month(月份) 1~12的整数或者 JAN~DEC , - / 四个字符
dayofweek(星期) 1~7的整数或 SUN~SAT(1表示星期日) , - ? / L C # 八个字符
year(年)(可选) 1970~2099 , - * / 四个字符

特殊字符的含义为:

  • *:表示该域可以匹配任意值。例如,在 minutes 域中使用 * 的话,代表每分钟都会触发事件。
  • ?:这个特殊符号只能用在 dayofmonth 和 dayofweek 两个域中,也表示该域可以匹配任意值,但是实际上是不会的。因为 dayofmonth 和 dayofweek 是会相互影响的。例如,要想在每月的 20 日触发事件的话,不管 20 日是星期几,只能使用如下表达式:20 20 20 20 * ?,表示每月的 20 点 20 分 20 秒触发事件,其中最后一位只能用 ?,而不能使用 *,如果使用 * 的话,则表示不管星期几都会被触发,这样的话就会违背初衷。
  • -:表示范围。例如,在 minutes 域中使用 5-20,表示从第 5 分钟开始,到第 20 分钟结束,每分钟触发一次事件。
  • /:表示起始时间开始出发,然后每隔固定时间触发一次。例如,在 minutes 域中使用 5/20,表示从第 5 分钟开始出发时间,每 20 分钟再触发一次,即 25 和 45 分钟时触发一次。
  • ,:表示列出枚举值。例如,在 minutes 域中使用 5,20,表示在第 5 分钟和第 20 分钟时各触发一次事件。
  • L:表示最后。只能出现在 dayofmonth 和 dayofweek 域,例如,在 dayofweek 域使用 5L,表示在最后的一个星期四触发事件。
  • W:表示有效工作日,即周一到周五,只能出现在 dayofmonth 域,系统将在离指定日期最近的有效工作日内触发事件。例如,在 dayofmonth 域使用 5W,如果 5 日是星期六,则将在最近的有效工作日,即 4 日触发事件;如果 5 日是星期日,则将在最近的有效工作日,即 6 日触发事件;如果 5 日在星期一到星期五的任意一天,则在 5 日触发。但是需要注意的是,W 寻找最近有效工作日的时候是不会跨月去寻找的。
  • LW:这两个月特殊字符可以结合使用,表示在某个月的最后一个工作日触发事件。
  • #:用于确定每个月第几个星期几,只能出现在 dayofmonth 域,例如 4#2,表示某月的第二个星期三。

常用表达式举例:

常用 cron 表达式
































































































表达式 含义
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 10,14,16 ? 表示每天的 10 点、14 点、16 点触发任务
0 0/30 9-17 ? 表示每天的 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 ** ? 2015 表示 2015 年的每天上午 10 点 15 触发任务
0 14 ? 表示每天下午 14 点开始到 14 点 59 结束,每一分钟触发一次任务
0 0/5 14 ? 表示每天下午从 14 点开始到 14 点 55 结束,每 5 分钟 触发一次任务
0 0/5 14,18 ? 每天下午 14 点到 14 点 55,以及 18 点到 18 点 55,每 5 分钟触发一次任务
0 0-5 14 ? 表示每天下午从 14 点开始,到 14 点 05 结束,每一分钟触发一次任务
0 10,44 14 ? 3 WED 表示 3 月的每周三的下午 14 点 10 分和 14 点 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 触发任务

发表评论

表情:
评论列表 (有 0 条评论,62人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Cron】学习:cron 表达式

    不知道你在玩游戏的时候是否发现过以下情况: 1. 玩某些游戏的时候,发现他的排行榜并不是时时更新的,而是每半个小时,或者一个小时更新一次。 2. 又比如很火的王者荣耀手游

    相关 Cron表达式

      Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式:   (1) Seconds Minutes Ho