如何使用此計算機

使用視覺化介面選擇分鐘、小時、日期、月份和星期。或直接輸入 cron 表達式來驗證。

公式與原理

Cron 格式:分 時 日 月 星期。* 代表每個值。*/5 代表每 5 個單位。

計算範例

「0 9 * * 1-5」= 週一到週五早上 9 點。「*/30 * * * *」= 每 30 分鐘。

專家建議

月份 1-12,星期 0-7(0 和 7 都是星期日)。上線前務必用本工具或實際環境驗證一次,排程寫錯往往要等到該執行的時間點才會發現。

最常被踩的坑:「日」和「星期」是 OR 不是 AND

當你同時指定「日期」和「星期」欄位時,cron 的行為是 OR——只要其中一個符合就會執行,而不是兩個都要符合。例如 0 0 1 * 1 不是「每月 1 號且是星期一」,而是「每月 1 號執行,而且每個星期一也執行」。

要真的達成「每月 1 號且是星期一」,cron 本身做不到,得在腳本裡自己判斷(例如開頭加一行檢查 [ "$(date +\%u)" = "1" ] || exit 0)。這個 OR 行為是 cron 規格的一部分,不是某個系統的 bug。

常用排程速查

表達式意思
*/5 * * * *每 5 分鐘
0 * * * *每小時整點
0 3 * * *每天凌晨 3 點
0 9 * * 1-5週一到週五早上 9 點
0 0 1 * *每月 1 號午夜
0 0 * * 0每週日午夜
30 2 1,15 * *每月 1 號和 15 號的 2:30
0 */6 * * *每 6 小時(0、6、12、18 點)

時區與環境變數

cron 使用的是伺服器的系統時區,不是你所在地的時區。台灣的伺服器如果設成 UTC,寫 0 9 * * * 會在台灣時間下午 5 點執行(UTC+8)。部署前先用 date 確認伺服器時區,或在 crontab 開頭設 CRON_TZ=Asia/Taipei(部分 cron 實作支援)。

另一個常見問題是環境變數不同:cron 執行時的 PATH 通常比你登入 shell 時精簡很多,所以在終端機跑得好好的指令,放進 cron 卻找不到執行檔。解法是在 crontab 裡用絕對路徑(例如 /usr/bin/python3),或在腳本開頭自己 source 需要的環境設定。

把輸出留下來,不然出錯你不會知道

cron 預設會把工作的輸出寄到系統郵件,但多數伺服器沒設好郵件、等於直接丟掉。建議把輸出導向記錄檔:0 3 * * * /path/to/job.sh >> /var/log/job.log 2>&1,其中 2>&1 會把錯誤訊息也一起寫入。沒有這一行,排程默默失敗好幾週都不會有人發現。