⏱️
← 返回教學列表

Cron 表達式語法:完整指南與範例

· 標籤: cron-syntax, crontab-format, cron-fields, cron-expression-guide, linux-automation

Cron 表達式語法

Cron 是類 Unix 系統上的標準工作排程器。每個 cron 表達式都以一個精簡的字串定義排程,指定指令何時執行。理解語法對於自動化備份、日誌輪替和維護任務至關重要。

5 欄位格式

標準的 cron 表達式包含五個以空格分隔的欄位:

* * * * *
| | | | |
| | | | +----- 星期(0-7,0 和 7 = 星期日)
| | | +------- 月份(1-12)
| | +--------- 日期(1-31)
| +----------- 小時(0-23)
+------------- 分鐘(0-59)

欄位詳細說明

| 欄位 | 範圍 | 特殊字元 | 範例 | |-------|-------|-------------------|---------| | 分鐘 | 0-59 | , - * / | 30 = 在第 30 分鐘 | | 小時 | 0-23 | , - * / | 6 = 在早上 6 點 | | 日期 | 1-31 | , - * / | 15 = 在 15 日 | | 月份 | 1-12 | , - * / | 6 = 在六月 | | 星期 | 0-7 | , - * / | 0 = 在星期日 |

分鐘控制執行的確切分鐘:30 * * * * 在每小時的第 30 分鐘執行。小時定義一天中的時間:0 6 * * * 在每天早上 6:00 執行。日期限制到特定的日曆日期:0 0 15 * * 在每月 15 日午夜執行。月份限制在特定月份執行:0 0 1 6 * 在 6 月 1 日執行。星期控制哪些工作日:0 8 * * 1-5 在週一至週五早上 8 點執行。

重要提示: 第 29-31 天僅在有這些日期的月份執行。在較短的月份中,這些值會被靜默跳過。

特殊字元

| 字元 | 名稱 | 用途 | 範例 | |------|------|---------|---------| | * | 星號 | 所有可能的值 | 在分鐘欄位 * = 每分鐘 | | , | 逗號 | 列舉值 | 1,15,30 = 第 1、15、30 分鐘 | | - | 連字號 | 範圍 | 9-17 = 小時 9 到 17 | | / | 斜線 | 步進值 | */5 = 每 5 分鐘 |

使用斜線的步進值

斜線表示「每 N 個單位」:

# 每 5 分鐘
*/5 * * * *

# 每 2 小時
0 */2 * * *

# 營業時間內每 15 分鐘
*/15 9-17 * * *

常見 Cron 排程模式

| 排程 | 表達式 | 說明 | |----------|------------|-------------| | 每分鐘 | * * * * * | 每天執行 1,440 次 | | 每 5 分鐘 | */5 * * * * | 健康檢查、監控 | | 每小時 | 0 * * * * | 每小時整點 | | 每日兩次 | 0 6,18 * * * | 早上 6 點和下午 6 點 | | 每日午夜 | 0 0 * * * | 經典維護排程 | | 每週日 | 0 0 * * 0 | 每週維護 | | 每月 1 日 | 0 0 1 * * | 月報 | | 工作日早上 9 點 | 0 9 * * 1-5 | 營業時間開始 |

非標準快捷方式

部分 cron 實作支援命名快捷方式:@yearly(1 月 1 日)、@monthly(每月 1 日)、@weekly(星期日)、@daily(午夜)、@hourly@reboot(系統啟動時執行一次)。Vixie cron、cronie 和 systemd timer 支援這些快捷方式。

常見錯誤

  • 同時設定日期和星期會產生 OR 條件 — 當任一匹配時任務就會執行,這通常不是預期的行為。
  • Cron 使用系統時區。接近日光節約時間轉換的任務可能執行兩次或完全不執行。
  • 務必確保有五個欄位。四個欄位無效;六個欄位需要擴展的 cron 語法。

測試你的 Cron 表達式

使用 cron 表達式驗證器來檢查語法、預覽即將到來的執行時間,並在影響生產環境之前發現錯誤。三十秒的驗證檢查即可防止無聲的排程失敗。

Cron 表達式語法:完整指南與範例 - CoolTool