Cron 排程解析與下次執行時間
輸入
| Cron 表達式 | 0 9 * * 1-5 |
|---|
Cron 排程解析與下次執行時間
解析任何 5 欄位 cron 排程或 @shorthand 別名,以純文字呈現排程說明,並顯示接下來三次的 UTC 執行時間。
輸入
Cron 排程表達式
結果
輸入數值即可顯示計算結果。
排程說明
下三次執行(UTC)
Cron 排程解析與下次執行時間
Cron 是 Unix 系統內建的定時排程器,以一行簡短的表達式定義重複執行的任務。無論是每天凌晨備份資料庫、每 15 分鐘爬取一次 API,還是每個週一上午 9 點發送報表,一個 cron 表達式即可完整描述排程規則。能夠快速解讀與驗證 cron 表達式,是 DevOps 工程師日常維運的基本技能。
Cron 表達式的格式
標準的 5 欄位 cron 表達式格式如下:
| 欄位 | 順序 | 允許值 | 特殊字元 |
|---|---|---|---|
| 分鐘 | 1 | 0–59 | * / , - |
| 小時 | 2 | 0–23 | * / , - |
| 日期 | 3 | 1–31 | * / , - |
| 月份 | 4 | 1–12 | * / , - |
| 星期幾 | 5 | 0–7(0 和 7 均代表星期日) | * / , - |
特殊字元說明
*— 萬用字元,代表「每個」(例如小時欄位填*代表每小時)*/n— 步進,每隔 n 個單位執行一次(例如分鐘欄位填*/15代表每 15 分鐘)a-b— 範圍,從 a 到 b 的每個值都符合(例如星期欄位填1-5代表週一至週五)a,b,c— 列表,只有列出的值才符合(例如日期欄位填1,15代表每月 1 日與 15 日)a-b/n— 步進範圍,例如10-50/10符合 10、20、30、40、50
常用排程範例
| 表達式 | 意義 |
|---|---|
* * * * * | 每分鐘 |
*/15 * * * * | 每 15 分鐘 |
0 * * * * | 每小時整點 |
0 9 * * 1-5 | 平日 UTC 09:00 |
30 17 * * 5 | 每週五 UTC 17:30 |
0 0 1 * * | 每月 1 日 UTC 午夜 |
0 0 1 1 * | 每年 1 月 1 日 UTC 午夜 |
0 0 * * 0 | 每週日 UTC 午夜 |
@shorthand 別名
多數 cron 實作支援以下便捷別名:
| 別名 | 等效表達式 |
|---|---|
@yearly / @annually | 0 0 1 1 * |
@monthly | 0 0 1 * * |
@weekly | 0 0 * * 0 |
@daily / @midnight | 0 0 * * * |
@hourly | 0 * * * * |
日期欄位與星期欄位的 OR 邏輯
初次使用 cron 時最常見的誤解,發生在日期欄位與星期欄位同時被限制的情況(兩者都不是 *)。此時 cron 採用 OR 邏輯,而非 AND 邏輯:只要任一條件成立,工作就會觸發。
舉例來說:
0 0 1 * 1
這個排程會在每月 1 日的午夜觸發,也會在每週一的午夜觸發——而不是只有恰好在 1 日的週一才執行。這個行為由 POSIX 標準定義,Vixie cron(最廣泛使用的實作)遵循此規範。
若只有日期或星期其中一個欄位有限制,則依該欄位判斷,另一個欄位無作用。
Cron 排程的運作原理
排程器每分鐘會比對目前時間是否與五個欄位全部吻合。若吻合,就觸發對應的工作。因此,最短的執行間隔是一分鐘。
排程器預設不會補跑錯過的任務。若伺服器在預定執行時間離線,該次執行會直接跳過。部分排程系統(如 Kubernetes CronJob)提供 startingDeadlineSeconds 設定,可在指定時間窗口內補跑錯過的任務。
時區注意事項
多數 cron 實作以伺服器本地時區解讀表達式。設定為 UTC 的伺服器,執行時間會與 UTC 表達式完全一致。使用其他時區的伺服器,觸發時間會依時差偏移。
Kubernetes CronJob 與 GitHub Actions 排程均以 UTC 解讀 cron 表達式。本計算機顯示的執行時間同樣以 UTC 為準;若你的系統使用不同時區,請自行加減對應的 UTC 時差。
常見問題(FAQ)
Cron 的五個欄位各代表什麼?
Cron 表達式由五個以空格分隔的欄位依序組成:分鐘(0–59)、小時(0–23)、日期(1–31)、月份(1–12)、以及星期幾(0–7,其中 0 與 7 都代表星期日)。每個欄位可填入具體數值、萬用字元()、範圍(1-5)、步進(/15)、列表(1,15),或組合語法如 1-5/2。@yearly、@monthly、@weekly、@daily、@hourly 等 @shorthand 別名,則各自展開為對應的五欄位表達式。
日期欄位與星期欄位同時設定時,排程如何運作?
當日期欄位與星期欄位都不是 *(亦即兩者都有限制),cron 採用 OR 邏輯:只要任一條件成立,工作就會觸發。例如「0 0 1 * 1」會在每月 1 日執行,也會在每個週一執行——而不是只有恰好落在 1 日的週一才執行。若只有其中一個欄位有限制,則僅依該欄位判斷執行日期。
顯示的下次執行時間是我當地時區嗎?
本計算機顯示的所有執行時間均為 UTC。多數 cron 實作——包括 Linux 的 crontab、Kubernetes CronJob、GitHub Actions 排程——都以伺服器本地時區或 UTC 解讀表達式。若你的 cron daemon 採用 UTC,這裡顯示的時間會完全吻合;若採用其他時區,請自行加減 UTC 時差換算。