Cron 表達式語法:完整指南與範例
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 表達式驗證器來檢查語法、預覽即將到來的執行時間,並在影響生產環境之前發現錯誤。三十秒的驗證檢查即可防止無聲的排程失敗。