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。