编辑
2023-03-17
运维
00
请注意,本文编写于 551 天前,最后修改于 551 天前,其中某些信息可能已经过时。

目录

前言
Cron 是什么?
| 是 |

前言

  Cron 表达式,是应用在 Unix 和类 Unix 操作系统之中,让脚本、任务定时进行周期性重复的执行。Cron 表达式有着丰富的表达能力,能够适应各种时间表达需求。本页整理了一些基本语法和常用样例,供大家参考。

Cron 是什么?

  首先在了解 cron 表达式之前,先谈谈 crontab 定时任务;日常在开发或运维中,经常遇到一些周期性执行的任务或需求,比如说,每隔一段时间执行一个脚本,每周一执行一个命令或操作。而 linux 已经给我们提供了一个便捷的方式 -- crontab 定时任务;crontab 就是一个自定义定时器,我们可以利用 crontab 命令在固定的间隔时间执行指定的系统指令或 shell script 脚本。而这个时间间隔的写法与我们平常用到的 cron 表达式相似。作用都是通过利用字符或命令去设置定时周期性地执行一些操作。

  我们可以将 cron 表达式看作一个以 5 或 6 个字符串空格隔开的字符串。这个 5 或 6 个空格将字符串划分为 6 或 7 个域,每个域代表着不同的含义。默认从左到右为:" 秒 分 小时 日 月 星期几 年份 "。

image-20220721143613775

字段含义范围或通配符必填
Seconds0-59,-*/
Minutes分钟0-59,-*/
Hours小时0-23,-*/
Day-of-Month日期1-31,-*?/LW
Month月份1-12 (或 JAN-DEC)或者 ,- * /
星期Day-of-Week每星期的周几1-7(或 SUNMONTUEWEDTHUFRISAT)或者 , - * ? / L #
Year年份1970-2099- * /

例子

  • 每天中午12点触发
0 0 12 * * ?
  • 每天上午10:15触发
0 15 10 ? * *
  • 每天上午10:15触发
0 15 10 * * ?
  • 每天上午10:15触发
0 15 10 * * ? *
  • 2005年的每天上午10:15触发
0 15 10 * * ? 2005
  • 在每天下午2点到下午2:59期间的每1分钟触发
0 * 14 * * ?
  • 在每天下午2点到下午2:55期间的每5分钟触发
0 0/5 14 * * ?
  • 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
0 0/5 14,18 * * ?
  • 在每天下午2点到下午2:05期间的每1分钟触发
0 0-5 14 * * ?
  • 每年三月的星期三的下午2:10和2:44触发
0 10,44 14 ? 3 WED
  • 周一至周五的上午10:15触发
0 15 10 ? * MON-FRI
  • 每月15日上午10:15触发
0 15 10 15 * ?
  • 每月最后一日的上午10:15触发
0 15 10 L * ?
  • 每月的最后一个星期五上午10:15触发
0 15 10 ? * 6L
  • 2002年至2005年的每月的最后一个星期五上午10:15触发
0 15 10 ? * 6L 2002-2005
  • 每月的第三个星期五上午10:15触发
0 15 10 ? * 6#3

详解

  • ,:表示列出枚举值。如在月中的值为 1,3, 则表示一月份和 3 月份都触发事件。

  • *:表示匹配该域任意值,如小时的字段为 * 时,表示每一小时都触发事件

  • ?:表示不指定值,用于日期和星期字段之间进行互斥。通常在日期和星期字段中的一个指定值,另外一个用 ? 表示不指定值。个人理解就是忽略该字段的值,直接根据另外一个字段的值进行执行。比如说:日期为 2,则星期应为 ?;

  • -:表示范围,一个连续触发的区间。如:时的值为 9-12,则表示 9-12 小时中的每个小时都触发事件。

  • /:表示间隔时间触发事件(开始时间 / 时间间隔)。如:在分钟值为 0/15,则表示从 0 分开始,每隔 15 分钟触发一遍事件。

  • #:表示该月第 n 个星期 x (x#n),仅用星期域。如:星期:6#3,表示该月的第三个星期五。

  • L:表示最后(最后一天或最后一个星期几);仅出现在日和星期的域中。用在日则表示该月的最后一天,用在星期则表示该月的最后一个星期 X。如:星期域上的值为 5L,则表示该月最后一个星期的星期四。在使用'L' 时,不要指定列表',' 或范围'-',否则易导致出现意料之外的结果。

  • W:仅用在日的域中,表示距离当月给定日期最近的工作日(周一到周五)。

    如:"4W" 表示距离 4 号最近的工作日(当月的)触发事件;(1)当 4 号就是工作日时,则表示当天触发;当 4 号为周六时,则表示 3 号(周五)触发;(2)当 4 号为周日时,则表示在 5 号(周一)触发;再如:"1W" 表示距离 1 号最近的工作日触发事件,但是,该工作日只算当月的。假如当月 1 号是周六,则 "1W" 表示在当月 3 号(周一)触发事件。就算上个月的最后一天是工作日,也不会触发事件。

  • LW‘L’'W' 可以一起组合在日字段使用。表示当月的最后一个工作日触发事件。

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Gustav

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!