Cron 表達式完全教學:排程任務設定從入門到精通

系統性學習 Cron 表達式語法,涵蓋基礎格式、特殊字元、常用範例和最佳實踐。適合 DevOps、後端開發者和系統管理員。

本文介紹的工具:Cron 表達式產生器

什麼是 Cron?

Cron 是 Unix/Linux 系統中的定時任務排程器,使用 Cron 表達式來定義任務的執行時間。Cron 表達式是一種簡潔但強大的時間描述格式。

Cron 表達式格式

標準 Cron 表達式由 5 個欄位組成:

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

特殊字元

字元 說明 範例
* 任意值 * * * * * 每分鐘
, 列舉多個值 1,15 * * * * 第 1 和 15 分鐘
- 範圍 1-5 * * * * 第 1 到 5 分鐘
/ 步進值 */15 * * * * 每 15 分鐘

常用 Cron 範例

基礎範例

表達式 說明
0 * * * * 每小時整點
0 0 * * * 每天午夜
0 9 * * 1-5 週一到週五早上 9 點
0 0 1 * * 每月 1 號午夜
0 0 1 1 * 每年 1 月 1 日午夜

進階範例

表達式 說明
*/5 * * * * 每 5 分鐘
0 */2 * * * 每 2 小時
0 9,18 * * * 每天 9 點和 18 點
0 0 * * 0 每週日午夜
30 4 1,15 * * 每月 1 號和 15 號凌晨 4:30

實際應用場景

1. 資料庫備份

# 每天凌晨 2 點備份
0 2 * * * /scripts/backup-db.sh

2. 日誌清理

# 每週日凌晨 3 點清理 30 天前的日誌
0 3 * * 0 find /var/log -mtime +30 -delete

3. 健康檢查

# 每 5 分鐘檢查服務狀態
*/5 * * * * /scripts/health-check.sh

4. 報表生成

# 每月 1 號早上 8 點生成月報
0 8 1 * * /scripts/generate-report.sh

最佳實踐

  1. 避免在整點執行:很多任務都設定在整點,可能造成系統負載集中
  2. 加入隨機延遲:在分散式系統中,避免所有節點同時執行
  3. 設定超時機制:防止任務卡住影響下次執行
  4. 記錄執行日誌:方便追蹤和除錯
  5. 使用絕對路徑:Cron 環境的 PATH 可能與互動式 Shell 不同

常見錯誤

忘記時區設定

Cron 預設使用系統時區,在不同環境中可能不一致。建議在 crontab 中明確設定:

CRON_TZ=Asia/Taipei
0 9 * * * /scripts/task.sh

忽略輸出重導向

Cron 任務的輸出預設會發送郵件,建議重導向到日誌檔:

0 * * * * /scripts/task.sh >> /var/log/task.log 2>&1

實用工具推薦

使用我們的 Cron 表達式產生器 可以可視化設定 Cron 排程,即時預覽下次執行時間,還有常用範本可以快速套用。