⏱️
← 返回教學列表

如何驗證 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 表達式驗證器提供三項功能:

  1. 語法驗證 — 即時回饋欄位值和格式。
  2. 排程預覽 — 從當前日期檢視即將到來的執行時間。
  3. 視覺化日曆 — 在月曆上繪製排定的執行時間。

任何 cron 表達式在部署前都應預覽接下來的數次執行時間。三十秒的檢查即可防止無聲的排程失敗。

如何驗證 Cron 表達式:逐步指南 - CoolTool