头图

Cron 表达式

一、概述

Cron 表达式 是一种用于定义定时任务调度的标准语法,广泛应用于 Linux 系统中的定时任务管理器 cron。它通过一组字段指定任务的执行时间,灵活地控制任务在特定时间点的运行。

在 cron 中,任务的调度时间通过 cron 表达式 来指定,它由 5 到 6 个字段组成(具体取决于环境)。每个字段表示时间单位(分钟、小时、日期等),用来描述任务的执行计划。

二、Cron 表达式的格式

1. 表达式格式组成

标准的 Cron 表达式由 5 或 6 个字段组成,每个字段之间用空格分隔。字段的顺序如下:

* * * * * *
| | | | | |
| | | | | +-- 星期几 (0 - 7) (Sunday = 0 or 7)
| | | | +---- 月份 (1 - 12)
| | | +------ 日期 (1 - 31)
| | +-------- 小时 (0 - 23)
| +---------- 分钟 (0 - 59)
+------------ 秒 (0 - 59) [可选字段]

如果使用的是 5 字段的格式(例如在 Linux 或大部分工具中),通常会忽略“秒”这一字段。

2. 每个字段的具体含义

字段含义允许的值
可选字段,表示任务开始的秒数。0-59
分钟任务开始的分钟数。0-59
小时任务开始的小时数(0 - 23)。0-23
日期任务运行的日期(1 - 31)。需要注意的是,日期和星期几的组合可能会产生冲突。1-31
月份任务运行的月份(1 - 12)。1-12
星期几任务运行的星期几(0 - 7),0 或 7 代表星期日,1 代表星期一,依此类推。0-7 (0 = Sunday)

3. 特殊字符

Cron 表达式支持几个特殊字符,用来表示各种灵活的调度方式:

  • *(星号):表示“每个”时间单位。比如 * 代表每分钟都运行。
  • ,(逗号):表示列举多个值。比如 1,5,10 表示任务将在第 1、第 5 和第 10 分钟执行。
  • -(连字符):表示范围。比如 10-20 表示任务将在第 10 到第 20 分钟之间的每一分钟执行。
  • /(斜杠):表示步长,表示每隔多少个时间单位执行。比如 */5 表示每隔 5 分钟执行一次。
  • L(L 字符):表示“最后的”时间单位。用于日期字段和星期字段。例如,L 可以用于表示“每月的最后一天”或“每周的最后一天”。
  • W(W 字符):表示最近的工作日。适用于日期字段,表示最近的工作日。例如,15W 表示离 15 号最近的工作日。
  • #(井号):用于指定某个月份的第几个星期几。例如,5#2 表示每月的第二个星期五。

三、Cron 表达式示例

1. 每分钟执行一次

* * * * *

表示任务每分钟执行一次。

2. 每小时执行一次

0 * * * *

表示任务每小时的第 0 分钟执行一次。

3. 每天凌晨 1 点执行一次

0 1 * * *

表示任务每天凌晨 1 点执行。

4. 每月 1 号执行一次

0 0 1 * *

表示任务每个月的 1 号执行。

5. 每周一凌晨 1 点执行一次

0 1 * * 1

表示任务每周一凌晨 1 点执行。

6. 每月的最后一天执行一次

0 0 L * *

表示任务每个月的最后一天执行。

7. 每隔 5 分钟执行一次

*/5 * * * *

表示任务每 5 分钟执行一次。

8. 每周三和周五的 12:30 执行

30 12 * * 3,5

表示任务在每周三和周五的中午 12:30 执行。

9. 每个月的第一个工作日执行

0 0 1W * *

表示任务将在每个月的第一个工作日执行。

10. 每月的第三个星期五执行

0 0 15-21 * 5

表示任务将在每月的第三个星期五执行。

11. Cron 表达式在线生成

https://cron.ciding.cc/

https://cron.qqe2.com/index-old.html

四、常见应用场景

  • 定时备份:例如每天凌晨执行数据库备份任务
  • 自动清理:例如每月的第一个工作日清理过期的数据或日志
  • 定时发送邮件或通知:每小时、每天等定时发送系统邮件或通知
  • 定时执行任务:如定期执行数据同步任务或 API 请求

五、总结

Cron 表达式是一种强大的定时任务调度工具,适用于各种需要定时执行的场景。它灵活、高效,尤其适用于基于时间的任务调度。通过结合不同的特殊字符,您可以创建非常复杂的定时任务。它广泛用于 Linux 系统的 cron 命令中,并在许多 Node.js 库中得到了支持,如 node-cron。


月恒
43 声望5 粉丝

前端