開發者必備速查手冊
Crontab 排程表達式完整速查手冊
Linux、Kubernetes CronJob、Spring Scheduler 等系統排程表達式結構詳解與高頻實用範例。 配合線上工具,讓排程設定零失誤。
標準 Crontab 5 欄位語法結構
┌───────────── 分鐘 Minute (0 - 59) │ ┌─────────── 小時 Hour (0 - 23) │ │ ┌───────── 日期 Day of Month (1 - 31) │ │ │ ┌─────── 月份 Month (1 - 12) │ │ │ │ ┌───── 星期 Day of Week (0 - 7,0 與 7 均為星期日) │ │ │ │ │ * * * * *
* (星號)
代表「每一個可能的值」。例如在分欄位代表每分鐘。
/ (斜線)
代表「步進間隔」。例如 */15 代表每隔 15 個單位執行。
, (逗號)
代表「指定多個列舉值」。例如 1,15,30 代表在該三個時間點執行。
- (連字號)
代表「連續範圍區間」。例如 1-5 代表 1 到 5 的每一天。
常見排程情境速查表 (Copy & Paste)
| 排程情境說明 | Cron 表達式 | 執行細節說明 |
|---|---|---|
| 每分鐘執行一次 | * * * * * | 每分鐘的第 0 秒觸發,通常用於高頻監控心跳 |
| 每 5 分鐘執行一次 | */5 * * * * | 在 0, 5, 10, 15, 20... 分鐘時觸發 |
| 每 15 分鐘執行一次 | */15 * * * * | 在 0, 15, 30, 45 分鐘時觸發 |
| 每 30 分鐘執行一次 | */30 * * * * | 在每小時的 0 分與 30 分時各觸發一次 |
| 每小時整點執行 | 0 * * * * | 例如 01:00, 02:00, 03:00... 執行 |
| 每天午夜 00:00 執行 | 0 0 * * * | 每日結算、備份或清理日誌的最常見排程 |
| 每天凌晨 02:30 執行 | 30 2 * * * | 避開尖峰時間的批次作業設定 |
| 每週一早上 09:00 執行 | 0 9 * * 1 | 每週工作日開始時發送週報或統計 |
| 每週日晚間 23:00 執行 | 0 23 * * 0 | 每週末全系統資料備份 |
| 每月 1 號凌晨 01:00 執行 | 0 1 1 * * | 每月月結帳務或重設配額排程 |
| 工作日(週一至週五)每小時 | 0 * * * 1-5 | 僅在週一到週五的整點執行 |
| 每年 1 月 1 號午夜執行 | 0 0 1 1 * | 年度重設或歸檔資料排程 |
Crontab 常見地雷與除錯注意事項
1. 伺服器時區 (Timezone) 陷阱
許多雲端 VPS (如 AWS EC2, GCP, DigitalOcean) 預設使用 UTC 時區。若您設定「0 2 * * *」,其觸發時間將是台灣時間(UTC+8)上午 10:00。在配置前請務必在終端機執行 date 確認系統時區。
2. 環境變數 PATH 不完整問題
Cron 執行時使用的環境變數極為精簡,常缺少 Node.js、Python 或自訂 binary 路徑。建議在 crontab 指令中一律使用完整絕對路徑(例如:/usr/bin/python3 /var/www/script.py)。
3. 星期 0 與 7 的跨平台差異
在標準 Linux Crontab 中,0 與 7 均被視為星期日;但在部分 Java Spring Quartz 或特殊排程引擎中,1 代表星期日、7 代表星期六。設定前可利用我們的線上解析工具推算接下來的觸發日期。