关于定时任务cron表达式的填写规则介绍

背景:在部署脚本的时候,如果你想要自定义一些定时任务,就需要用到cron表达式。对于小白来说,一开始看到这些数列和* * *一定是晕的。但其实,这个表达式学会后就很简单了,而且不难,稍微看看都能理解。这里简单介绍一下表达式的规则,方便大家更加得心应手的使用一些脚本的运行。

一、Cron表达式的组成

其实就是一组时间序列,一个由6个空格7个域组成的字符串,排序如下:

[秒] [分] [时] [日] [月] [周] [年]

二、Cron每个域(时间)的相关定义,用表格梳理比较明了。

是否必填值以及范围通配符
0-59, - * /
0-59, - * /
0-23, - * /
1-31, - * ? / L W
1-12 或 JAN-DEC, - * /
1-7 或 SUN-SAT, - * ? / L #
1970-2099, - * /
Cron表达式

通配符的含义:

  • ,:表示在两个及以上的时间点中都执行。如在月中的值为1,3,则表示1月和3月都触发事件
  • *:表示匹配该域任意值,可解读为 “每”,如小时的字段为*时,表示每一小时都触发事件
  • ?:表示不指定值,用于日期和星期字段之间进行互斥。通常在日期和星期字段中的一个指定值,另外一个用?表示不指定值。使用的场景为不需要关心当前设置这个字段的值。例如:要在每月的6号触发一个操作,但不关心是周几,我们可以这么设置 0 0 0 6 * ?
  • -:表示范围,一个连续触发的区间。如:时的值为6-8,则表示6-8小时中的每个小时都触发事件。
  • /:表示间隔时间触发事件(开始时间/时间间隔)。其中第一部分是起始值,除了秒以外都会降低一个单位,比如在 “秒” 上定义 5/10 表示从 第 5 秒开始 每 10 秒执行一次,而在 “分” 上则表示从 第 5 秒开始 每 10 分钟执行一次。
  • #:表示该月第n个星期x(x#n),仅用星期域。如:星期:6#3,表示该月的第三个星期五。
  • L:表示LAST 最后(最后一天或最后一个星期几);仅出现在日和星期的域中。用在日则表示该月的最后一天,用在星期则表示该月的最后一个星期X。如:星期域上的值为5L,则表示该月最后一个星期的星期四。在使用'L'时,不要指定列表','或范围'-',否则易导致出现意料之外的结果。
  • W:仅用在日的域中,表示距离当月给定日期最近的工作日(周一到周五)。 如:"4W"表示距离4号最近的工作日(当月的)触发事件; (1)当4号就是工作日时,则表示当天触发;当4号为周六时,则表示3号(周五)触发; (2)当4号为周日时,则表示在5号(周一)触发; 再如:"1W"表示距离1号最近的工作日触发事件,但是,该工作日只算当月的。假如当月1号是周六,则"1W"表示在当月3号(周一)触发事件。就算上个月的最后一天是工作日,也不会触发事件。
  • LW‘L’'W'可以一起组合在日字段使用。表示当月的最后一个工作日触发事件。

三、举个栗子?(要足够多)

  • */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 触发

后话:怎么样,是不是很简单?赶紧去设置自己的定时任务吧!让你的脚本?飞起来~

群晖/服务器Docker青龙面板部署方法 12.19更新

群晖Docker青龙面板相关自定义设置 (常用脚本)6月27日更新某券单命令

群晖Docker青龙面板bot交互配置7.19更新tgbot申请

群晖Docker青龙面板搭建花语JDC扫码及互助使用方法 6.27更新适配2.8青龙面板JDC

关于某些脚本的变量填写/获取/运行方法(专治疑难杂症)6.27更新某券

群晖Synology京东自动签到的推送通知

圈子

高能圈

-> 加入科技玩家交流群组:点击加入 注意:
1.文中二维码和链接可能带有邀请性质,请各位玩家自行抉择。
2.请勿通过链接填写qq号与密码、银行卡号与密码等个人隐私信息。
3.禁止纯拉人头,拉app注册等信息,发现必小黑屋。
4.同一种信息仅发一次,多发会被删除。
5.文章中源码或APP等,无法保证其绝对安全,需自行辨别。
6.文章关联方不想展示也可以微信站长“socutesheep”删除。
本文由 @LAzySheep 发布。如若转载,请注明出处: 科技玩家 » 关于定时任务cron表达式的填写规则介绍

给TA买糖
共{{data.count}}人
人已买糖
学习笔记

群晖Synology命令wget不支持HTTPS的解决方法

2021-6-19 10:48:25

学习笔记

群晖Synology京东自动签到的推送通知

2021-6-20 17:28:51

67 条回复 A文章作者 M管理员
贴心提醒
请认真对待作者付出,勿发表无意义言论,触发过滤规则的评论将无法提交,包含敏感词的评论会自动变成待审核状态哦。
  1. 行走的飞手

    新手学习。谢谢大佬分享

  2. 小鲸

    好棒!学会了!

  3. 黑较瘦

    打卡升级

  4. 七年

    辛苦大佬分享了,我先学习一下

  5. jerryc

    谢谢分享,学习了

  6. ?时间ᥫᩣ

    新手学习。❛˓◞˂̵✧

  7. 可乐?

    感谢大佬分享

  8. 七年

    感谢分享,插眼学习

  9. 这把看我表演

    谢谢分享,学习了

  10. 动动哥12312

    新手学习。谢谢大佬分享

  11. 科技小白

    好棒!学会了!

  12. slimei

    谢谢大佬分享,谢谢!

  13. slimei

    打卡升级

  14. 84896150

    努力升级

  15. 萝卜头

    谢谢,分享学习了

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索