← 返回教學列表
如何驗證 Cron 表達式:逐步指南
· 標籤: cron-validation, cron-debugging, cron-syntax-check, schedule-validation, linux-crontab
如何驗證 Cron 表達式
Cron 表達式雖然精簡,但很容易出錯。一個放錯位置的斜線或超出範圍的值,可能導致任務在錯誤的時間執行 — 或完全不執行。在部署前驗證表達式,可以避免關鍵任務默默失敗時花費數小時進行偵錯。
常見語法錯誤
超出範圍的值
每個欄位接受特定的範圍。超出此範圍的值無效。
# 無效:分鐘 60 超出範圍(0-59)
60 * * * *
# 無效:小時 24 超出範圍(0-23)
0 24 * * *
缺少欄位
Cron 表達式需要恰好五個欄位。四個欄位無效,六個欄位需要擴展語法。
# 無效:只有 4 個欄位(缺少星期)
0 0 * *
# 無效:6 欄位語法,但沒有正確的守護程序支援
0 0 * * * * /command.sh
務必確認:分鐘、小時、日期、月份、星期。
錯誤的步進值
# 無效:步進值不能為 0
*/0 * * * *
# 無效:步進值超過欄位最大值
*/61 * * * *
步進值必須從 1 開始,且不得超過欄位的最大值。
如何驗證 Cron 表達式
步驟 1:解析為欄位
以空格分割,確認恰好有五個欄位:
表達式:30 6 * * 1-5
欄位: 分鐘=30, 小時=6, 日=*, 月=*, 星期=1-5
步驟 2:驗證每個欄位
| 欄位 | 允許範圍 | 接受的特殊字元 |
|-------|--------------|-----------------------|
| 分鐘 | 0-59 | * , - / |
| 小時 | 0-23 | * , - / |
| 日期 | 1-31 | * , - / |
| 月份 | 1-12 | * , - / |
| 星期 | 0-7 | * , - / |
步驟 3:檢查衝突
某些表達式語法上有效,但邏輯上令人意外:
# 在 15 日或每個星期日執行 — 一個 OR 條件
0 0 15 * 0
日期和星期同時使用時,在標準 cron 中會產生 OR 條件。當任一匹配時任務就會執行。
步驟 4:預覽即將到來的執行時間
產生執行時間來視覺化驗證你的排程:
表達式:0 2 * * 1
接下來的 5 次執行:
1. 2026-07-27 02:00:00(週一)
2. 2026-08-03 02:00:00(週一)
3. 2026-08-10 02:00:00(週一)
如果預覽結果與你的意圖不符,請在投入生產前修正表達式。
偵錯未執行的任務
一個有效的表達式卻未執行,通常是系統問題:
- 權限 — 腳本必須具有執行權限(
chmod +x)。 - 路徑 — cron 使用最小化的 PATH。務必使用絕對路徑:
/usr/local/bin/mybackup.sh而非mybackup.sh。 - 環境變數 — cron 不會載入 shell 設定檔。請在 crontab 或腳本本身中匯出變數。
- 日誌 — 重新導向輸出以確認執行:
0 6 * * * /path/to/script.sh >> /var/log/cron.log 2>&1
使用驗證器工具
Cron 表達式驗證器提供三項功能:
- 語法驗證 — 即時回饋欄位值和格式。
- 排程預覽 — 從當前日期檢視即將到來的執行時間。
- 視覺化日曆 — 在月曆上繪製排定的執行時間。
任何 cron 表達式在部署前都應預覽接下來的數次執行時間。三十秒的檢查即可防止無聲的排程失敗。