開發者必備速查手冊

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 代表星期六。設定前可利用我們的線上解析工具推算接下來的觸發日期。