RunToolz iconRunToolz
Welcome to RunToolz!
Cron自動化DevOps

Cron 表達式:排程任何事情而不用猜測

那些神秘的 cron 排程字串終於解釋清楚了。從五個欄位的含義到常見排程模式,學習寫出第一次就能正確執行的 cron 表達式。

RunToolz Team2026年1月25日4 min read

0 0 * * * — 這是什麼意思?

如果你使用過 AWS Lambda、GitHub Actions 或任何任務排程器,你就見過 cron 表達式。五個或六個神秘的欄位,不知怎麼就能排程工作。

它們沒有看起來那麼複雜。

五個欄位

┌───────────── 分鐘 (0 - 59)
│ ┌───────────── 小時 (0 - 23)
│ │ ┌───────────── 日期 (1 - 31)
│ │ │ ┌───────────── 月份 (1 - 12)
│ │ │ │ ┌───────────── 星期 (0 - 6, 星期日 = 0)
│ │ │ │ │
* * * * *

每個欄位限制工作何時執行。* 表示「每個」。數字表示「只有那個值」。

想親自試試嗎?解析 Cron 表達式

讀取範例

0 0 * * * — 分鐘 0,小時 0,任何日期,任何月份,任何工作日 = 每天午夜

30 8 * * 1-5 — 上午 8:30,星期一到星期五 = 工作日早晨

0 */2 * * * — 每 2 小時 = 凌晨 2 點、4 點、6 點...

0 9 1 * * — 每月 1 日上午 9 點 = 月報時間

特殊字符

* — 每個值(每分鐘、每小時等)

, — 多個值。1,15 表示 1 日和 15 日。

- — 範圍。1-5 表示 1 到 5。

/ — 步進。*/15 表示每 15。分鐘欄位中的 */15 = 每 15 分鐘。

常見模式

每 5 分鐘: */5 * * * *

每小時的第 30 分鐘: 30 * * * *

每天凌晨 3 點: 0 3 * * *

每週日午夜: 0 0 * * 0

每月 1 日上午 9 點: 0 9 1 * *

工作日下午 6 點: 0 18 * * 1-5

陷阱

星期 vs 日期。 如果你兩者都設定,大多數系統會將它們進行 OR 運算。0 0 1 * 1 在 1 日和每個星期一執行,而不僅僅是 1 日的星期一。

時區很重要。 大多數 cron 系統使用伺服器時間或 UTC。知道你在處理哪一個。

6 欄位 vs 5 欄位。 有些系統在開頭添加秒欄位。0 0 0 * * * 使用秒欄位會是午夜。

星期日 = 0 或 7。 取決於系統。星期日兩者通常都可以。

部署前測試

不要猜測 0 0 */2 * * 是每 2 天還是每 2 小時執行。使用 cron 解析器。

執行幾個預期的觸發時間。確保它們符合你的意圖。

對於關鍵工作,設定監控。一個欄位錯誤的 cron 表達式可能會讓你的每日工作每小時執行——或讓你的每小時工作每年執行一次。

Cron 的替代方案

英文語法。 有些排程器接受「every day at 3pm」而不是 0 15 * * *。更清楚但可移植性較差。

Rate 表達式。 AWS 使用 rate(5 minutes) 以及 cron 表達式。對於簡單的間隔更容易。

Systemd timers。 Linux 的 cron 替代方案,具有更好的日誌記錄和依賴管理。


Cron 表達式密集但可學習。五個欄位,每個限制工作何時執行。測試你的表達式,注意你的時區,你就能可靠地排程任何事情。