配置定时任务的 cron 表达式有哪几种?

配置定时任务的 cron 表达式有哪几种?Cron 表达式是一种用于配置 Cron 任务调度的字符串格式,主要用于 Unix 和 Unix-like 系统的定时任务服务,以及一些其他的任务调度库和服务,如 Quartz、Spring、AWS

Cron 表达式是一种用于配置 Cron 任务调度的字符串格式,主要用于 Unix 和 Unix-like 系统的定时任务服务,以及一些其他的任务调度库和服务,如 Quartz、Spring、AWS CloudWatch 等。不同的系统和库对 Cron 表达式的格式会有微小的差异,但基本概念是一样的,接下来就介绍下几种常见的 Cron 表达式格式。

Unix Cron 表达式

Unix Cron 表达式由5个字段组成,每个字段由空格分隔。每个字段代表一个时间单位,从左到右分别是:

  • 分钟(0 – 59)
  • 小时(0 – 23)
  • 日期(1 – 31)
  • 月份(1 – 12)
  • 星期几(0 – 7,其中0和7都表示周日)

每个字段可以包含一个或多个值,以及一些特殊字符:

  • 星号 (*) 表示该字段的所有可能值。例如,小时字段的 * 表示 “每个小时”。
  • 逗号 (,) 用于列出多个值。例如,星期几字段的 “1,3,5” 表示 “周一,周三,和周五”。
  • 连字符 (-) 用于表示一个范围。例如,日期字段的 “1-15” 表示 “月初到月中”。
  • 斜线 (/) 用于表示步进值。例如,分钟字段的 “*/15” 表示 “每15分钟”。

看几个例子:

  • 0 0 * * *:每天零点执行任务。
  • 30 2 * * 1:每周一的凌晨 2:30 执行任务。
  • 0 12 1 * *:每个月的第一天中午 12 点执行任务。
  • */5 * * * *:每 5 分钟执行一次任务。

Quartz Cron 表达式

Quartz 是 Java 环境中被广泛使用的任务调度库,但是 Cron 表达式与 Unix 系统的 Cron 表达式有一些不同。Quartz 的 Cron 表达式由七个字段组成,每个字段由空格分隔。每个字段代表一个时间单位,从左到右分别是:

  1. 秒(0 – 59)
  2. 分钟(0 – 59)
  3. 小时(0 – 23)
  4. 日期(1 – 31)
  5. 月份(1 – 12 或 JAN-DEC)
  6. 星期几(1 – 7 或 SUN-SAT,其中1和7都表示周日)
  7. 年份(空,1970-2099)

每个字段可以包含一个或多个值,以及一些特殊字符:

  • 星号 (*) 表示该字段的所有可能值。例如,小时字段的 * 表示 “每个小时”。
  • 逗号 (,) 用于列出多个值。例如,星期几字段的 “MON,WED,FRI” 表示 “周一,周三,和周五”。
  • 连字符 (-) 用于表示一个范围。例如,日期字段的 “1-15” 表示 “月初到月中”。
  • 斜线 (/) 用于表示步进值。例如,分钟字段的 “0/15” 表示 “每15分钟”。
  • 问号 (?) 只能用在日期和星期几字段,表示 “不指定值”。这是因为日期和星期几是有冲突的(例如,”第三个星期五” 和 “20日” 可能不是同一天),在这两个字段中必须有一个使用 ?。
  • L 字符可以在日期和星期几字段中使用,表示 “最后”。在日期字段中,表示这个月的最后一天;在星期几字段中,表示这个月的最后一个星期几(例如,”6L” 表示 “最后一个星期五”)。
  • W 字符只能在日期字段中使用,表示 “工作日”。例如,”15W” 表示 “离这个月的15日最近的工作日”。
  • 字符只能在星期几字段中使用,表示 “第几个”。例如,”FRI#2” 表示 “这个月的第二个星期五”。

看几个例子:

  • 0 0 12 * * ?:每天中午 12 点执行任务。
  • 0 15 10 ? * MON-FRI:周一到周五的上午 10:15 执行任务。
  • 0 0 12 ? * WED:每周三的中午 12 点执行任务。
  • 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 期间,每分钟执行一次任务。

Spring Cron 表达式

Spring Framework 使用 Quartz 作为调度引擎,因此 Spring 的 Cron 表达式基本上遵循了 Quartz 的 Cron 表达式语法,但有一些小的差异。

  • 两者对周的某天的处理略有不同。在 Spring 中,周的某天是从 0 开始的(0 代表星期日),而在 Quartz 中,是从 1 开始的(1 代表星期日)。
  • Spring 不支持 Quartz 的一些特殊字符,如问号 (?)、L、W 和 #。

AWS CloudWatch Cron 表达式

AWS CloudWatch 使用的 Cron 表达式与 Unix 或 Quartz Cron 表达式稍有不同。CloudWatch 的 Cron 表达式由六个必需字段组成,还有一个可选字段。这些字段以空格分隔,从左到右分别代表:

  1. 分钟(0 – 59)
  2. 小时(0 – 23)
  3. 日期(1 – 31)
  4. 月份(1 – 12 或 JAN-DEC)
  5. 星期几(1 – 7 或 SUN-SAT,其中1表示周日,7表示周六)
  6. 年份(1970 – 2199)
  7. 时区(可选)

和其他 Cron 表达式一样,CloudWatch Cron 表达式也支持一些特殊字符:

  • 星号 (*) 表示该字段的所有可能值。例如,月份字段的 * 表示 “每个月”。
  • 逗号 (,) 用于列出多个值。例如,星期几字段的 “1,5” 表示 “周日和周四”。
  • 连字符 (-) 用于表示一个范围。例如,日期字段的 “1-15” 表示 “月初到月中”。
  • 斜线 (/) 用于表示步进值。例如,小时字段的 “0/2” 表示 “每两个小时”。

看几个例子:

  • 0 12 * * ? *:每天中午 12 点触发事件。
  • 15 10 ? * MON-FRI *:在工作日的上午 10:15 触发事件。
  • 0 12 ? * WED *:每周三的中午 12 点触发事件。
  • 0/15 * ? * * *:每 15 分钟触发一次事件。
  • 0 14,18 ? * * *:在每天的下午 2 点和 6 点触发事件。

注意,CloudWatch Cron 表达式中的星期几字段和日期字段不能同时指定。如果你试图同时指定这两个字段,事件可能不会按照预期进行触发。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/36694.html

(0)
上一篇 2023-11-15
下一篇 2023-11-15

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注