Cron 運算式是一個簡潔的五欄位字串,用來告訴排程器(例如 cron、Quartz 或 Spring)何時執行任務。這些欄位依序為:分鐘 (0-59)、小時 (0-23)、日期 (1-31)、月份 (1-12) 以及星期 (0-7,其中 0 和 7 都代表星期日)。每個欄位接受數字、通訊符號 (*)、以逗號分隔的清單、包含端點的範圍(例如 1-5),或步進值(例如 */15)。例如,0 9 * * 1 會在每週一的上午 9:00 執行。手動解析 cron 運算式來檢查語法或預測執行時間容易出錯,特別是在通訊符號或步進值橫跨多個值的情況下。「Cron 解析工具」透過驗證運算式、以淺顯英文摘要每個欄位,以及計算在本地時區和 UTC 時區下接下來五個符合的執行時間來解決這個問題。這讓您在將排程部署到正式環境之前,可以確認排程符合您的預期。
Cron 運算式廣泛用於自動化作業,從簡單的備份到複雜的工作流程。一個放錯位置的通訊符號或不正確的範圍,可能會導致任務在錯誤的時間執行、使伺服器過載,或錯過關鍵期限。例如,0 0 1 * * 會在每月第一天的午夜執行,而 0 0 * * 1 則會在每週一的午夜執行。兩者差異微妙但至關重要。「Cron 解析工具」透過清楚顯示運算式所選定的具體日期和時間來消除猜測。它也能處理邊界情況,例如月底日期(某些排程器中的 L)或非標準步進值(例如每三小時的 */3)。無論您要排程每日報告、每週清理作業或每月資料庫備份,先解析運算式能確保任務在您預期的時間執行。

Cron 運算式的運作方式
Cron 運算式由五個以空格分隔的必填欄位組成。每個欄位都有特定的範圍與用途:
| 欄位 | 範圍 | 允許的值 | 範例 |
|---|---|---|---|
| 分鐘 | 0-59 | 數字、*、範圍(例如 0-30)、清單(例如 0,15,30,45)、步進值(例如 */5) | 0、*、0-30、*/15 |
| 小時 | 0-23 | 數字、*、範圍、清單、步進值 | 9、0-11、*/2 |
| 日期 | 1-31 | 數字、*、範圍、清單、步進值、L(某些排程器中代表最後一天) |
1、*、1-15、L |
| 月份 | 1-12 | 數字、*、範圍、清單、步進值,或名稱(例如 JAN-DEC) | 1、*、1-6、JAN,MAR,MAY |
| 星期 | 0-7 (0 和 7 代表星期日) | 數字、*、範圍、清單、步進值,或名稱(例如 SUN-SAT) | 0、*、1-5、MON-FRI |
通訊符號 (*) 會比對欄位中的每個可能值。例如,* * * * * 會每分鐘執行一次。範圍(例如 1-5)包含從起始到結束(含端點)之間的所有值。清單(例如 1,3,5)會比對任何指定的值。步進值(例如 */15)會從第一個值開始,每隔 n 個值比對一次。某些排程器(例如 Quartz)會為秒數或年份加上額外欄位,但經典的五欄位格式仍是最常見的,也是「Cron 解析工具」所支援的格式。
逐步解析 Cron 運算式
- 在瀏覽器中開啟 Cron 解析工具。無需安裝或註冊。
- 在輸入欄位中輸入您的 cron 運算式。請依分鐘、小時、日期、月份、星期的順序使用剛好五個欄位。例如:
0 9 * * 1。 - 點擊「Parse」或按下 Enter。工具會驗證運算式並顯示:
- 運算式的標準化版本(例如
0 9 * * MON)。 - 每個欄位的淺顯英文摘要(例如「在分鐘 0、小時 9、每月的每一天、每個月、星期一」)。
- 您本地時區與 UTC 下接下來五個執行時間。
- 運算式的標準化版本(例如
- 檢視摘要與執行時間,確認排程符合您的預期。例如,如果您輸入
0 9 * * 1,摘要應顯示「星期一」,且執行時間都應該是星期一的上午 9:00。 - 如果運算式無效,工具會顯示錯誤訊息並指出驗證失敗的欄位。請修正語法後再試一次。
- 驗證完成後,複製標準化的運算式或執行時間,以用於您的排程器設定中。
常見的 Cron 運算式範例
以下是 cron 運算式的實用範例及其意義:
| 運算式 | 意義 | 使用情境 |
|---|---|---|
0 * * * * |
每小時的 0 分執行 | 每小時的日誌輪替 |
0 0 * * * |
每天的午夜執行 | 每日資料庫備份 |
0 9 * * 1 |
每週一的上午 9:00 執行 | 每週團隊會議提醒 |
0 0 1 * * |
每月第一天的午夜執行 | 每月帳單報告 |
0 0 * * 0 |
每週日的午夜執行 | 每週清理作業 |
*/15 * * * * |
每 15 分鐘執行一次 | 健康檢查 ping |
0 0 1 1 * |
1 月 1 日的午夜執行 | 年度封存任務 |
這些範例展示了通訊符號、步進值與特定值如何組合,以建立有彈性的排程。「Cron 解析工具」透過將這些運算式翻譯成淺顯語言並顯示接下來的執行時間,協助您驗證它們。例如,*/15 * * * * 會顯示每 15 分鐘的執行時間,而 0 9 * * 1 則會確認任務只在星期一執行。
時區與排程器相容性
Cron 運算式本身與時區無關,但執行它們的排程器則有關。「Cron 解析工具」會同時以您的本地時區和 UTC 顯示執行時間,但您的排程器可能使用不同的時區。例如,如果您的伺服器位於 UTC+2,而您將任務排程為 0 9 * * *,任務會在 UTC+2 的上午 9:00 執行,而不是您本地時區的上午 9:00。請務必確認排程器的時區設定,以避免時區不符。常見的排程器包括:
- Unix cron:使用系統的本地時區。在終端機執行
date來檢查。 - Quartz (Java):預設使用 JVM 的時區,但可依觸發器進行設定。詳情請參閱 Quartz 說明文件。
- Spring Boot:使用伺服器的時區。可在
application.properties中以spring.task.scheduling.time-zone進行設定。 - AWS CloudWatch Events:預設使用 UTC。您可以在規則設定中覆寫此項。
「Cron 解析工具」也能協助您測試邊界情況,例如日光節約時間的切換。例如,如果您將任務排程在 0 2 * * *,而所在的時區有日光節約時間,當時鐘切換時,任務可能會執行兩次或完全不執行。工具顯示的執行時間會反映這種情況,讓您可以視需要調整排程。
疑難排解無效的運算式
如果「Cron 解析工具」拒絕您的運算式,請檢查以下常見錯誤:
- 欄位數量錯誤:經典的 cron 運算式必須剛好有五個欄位。包含秒數或年份的 Quartz 運算式不受支援。
- 無效的值:每個欄位都有特定的範圍(例如分鐘為 0-59)。超出這些範圍的值是無效的。
- 分隔符號錯誤:欄位之間必須以空格分隔,不能用逗號、斜線或其他字元。
- 不支援的語法:某些排程器支援特殊字元,例如
L(當月最後一天)或#(當月第幾個星期幾),但「Cron 解析工具」僅支援標準的五欄位語法。 - 前置零:雖然某些排程器允許前置零(例如以
05表示 5),但其他排程器則不允許。請使用純數字(例如5)以避免問題。
例如,0 9 * * 1,2,3,4,5 是有效的,且會在週一至週五的上午 9:00 執行;而 0 9 * * 1-5 也是有效的,可以用更少的輸入達到相同的結果。「Cron 解析工具」會將運算式標準化為最短的有效形式,所以您可以選擇自己偏好的語法。
對於更進階的排程需求,可考慮使用 Cron 運算式產生器,讓您無需死記欄位順序或語法即可建立運算式。如果您正在處理 JSON 設定,JSON 驗證工具 能協助確保您的 cron 運算式在設定檔中格式正確。如果您需要比較兩個 cron 運算式,差異比對工具 可以突顯它們之間的差異。
相關指南:如何在 C++ 中使用 ASCII 碼處理字元。