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.qqe2.com/index-old.html
四、常见应用场景
- 定时备份:例如每天凌晨执行数据库备份任务
- 自动清理:例如每月的第一个工作日清理过期的数据或日志
- 定时发送邮件或通知:每小时、每天等定时发送系统邮件或通知
- 定时执行任务:如定期执行数据同步任务或 API 请求
五、总结
Cron 表达式是一种强大的定时任务调度工具,适用于各种需要定时执行的场景。它灵活、高效,尤其适用于基于时间的任务调度。通过结合不同的特殊字符,您可以创建非常复杂的定时任务。它广泛用于 Linux 系统的 cron 命令中,并在许多 Node.js 库中得到了支持,如 node-cron。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。