博客 / 詳情

返回

Cron 表達式用法

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。

user avatar tufeiyuan_5d9f0a380c30e 頭像 anetin 頭像 liyuan_5aa3282cf3353 頭像 barry_5a71d0d9f06db 頭像 pingan8787 頭像 wensandaoshi 頭像
6 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.