首頁 資源庫 常用 Cron 表達式

常用 Cron 表達式

這裡彙整了實際工作中最常用的標準 5 欄位 Cron 表達式。點擊卡片即可複製表達式,貼到 Cron 工具還能看到白話的說明和接下來幾次的執行時間。卡片頂部的色帶在一天(按星期、按日期的條目則為一週、一月、一年)的時間軸上標出了任務的觸發時刻。

打開工具 →
每分鐘
* * * * *
每 5 分鐘
*/5 * * * *
每 10 分鐘
*/10 * * * *
每 15 分鐘
*/15 * * * *
每 30 分鐘
*/30 * * * *
每小時整點
0 * * * *
每小時的第 30 分
30 * * * *
每 3 小時
0 */3 * * *
每 6 小時
0 */6 * * *
工作時段每小時(9 點到 18 點)
0 9-18 * * *
每天午夜
0 0 * * *
每天上午 9 點
0 9 * * *
每天 9 點和 18 點
0 9,18 * * *
夜間批次(凌晨 2:30)
30 2 * * *
平日上午 9 點
0 9 * * 1-5
週末午夜
0 0 * * 0,6
每週一 8 點
0 8 * * 1
每週五 18 點
0 18 * * 5
每週日凌晨 4 點
0 4 * * 0
每月 1 日午夜
0 0 1 * *
月末區間 23 點(28 日到 31 日)
0 23 28-31 * *
每季首日午夜
0 0 1 1,4,7,10 *
每年 1 月 1 日午夜
0 0 1 1 *

常見問題

Cron 的 5 個欄位分別代表什麼?
從左到右依序是:分鐘(0-59)、小時(0-23)、日(1-31)、月(1-12)、星期(0-6,0 代表週日)。不少實作也接受用 7 表示週日,但寫 0 在哪裡都通用。如果同時限定日和星期,大多數 cron 會以「或」的關係解讀,導致執行得比預期更頻繁,因此建議像本頁的範例一樣只用其中一個。
這些排程在哪個時區執行?
Cron 依照執行常駐程式的伺服器時區。如果伺服器使用 UTC,這裡寫的「9 點」指的是 UTC 的 9 點,而不是你當地的上午。安裝 crontab 前先確認伺服器時區;如果實作支援,也可以用 CRON_TZ 變數固定時區。在有日光節約時間的地區,最好避開凌晨那些會被跳過或重複的時段。
如何在每月最後一天執行?
標準 5 欄位語法沒有「最後一天」的寫法(L 屬於 Quartz 等排程器的擴充語法)。常見的做法是安排在 28 日到 31 日每天執行,再讓腳本判斷明天是否為 1 日,例如用 GNU date 寫成 [ "$(date -d tomorrow +\%d)" = "01" ](注意 crontab 中的 % 要跳脫成 \%)。改在每月 1 日執行並當作上個月的收尾處理,往往更簡單。
Cron 支援以秒為單位執行嗎?
不支援。標準 crontab 的最小單位是 1 分鐘,沒有秒欄位。以秒開頭的 6 欄位表達式屬於 Quartz 等特定函式庫,寫進一般 crontab 會出現格式錯誤。如果需要每 30 秒執行一次,常見做法是把同一條指令登記兩行,其中一行前面加上 sleep 30。
Family Site