Cron表示式構建器

只需通過下拉選單和數值輸入選擇分鐘、小時、日期、月份和星期,即可自動生成cron表示式。可即時預覽生成的cron字串、通俗語言的說明文字,以及接下來5次執行時間,方便編寫crontab或GitHub Actions的定時任務。

常用排程速查表

以下是典型排程場景對應的cron表示式列表。點選某一行即可將其作為預設應用到上方的構建器中。

預設名稱 cron表示式 含義
每天凌晨0點 0 0 * * * 每天0點0分(凌晨)執行。
工作日9點 0 9 * * 1-5 工作日(週一至週五)的9點執行。
每小時第0分鐘 0 * * * * 每小時的第0分鐘執行一次。
每週一 0 0 * * 1 每週一0點0分執行。

什麼是 cron 運算式

cron 運算式是告訴 UNIX 類系統的工作排程器「何時執行」的五個數值欄位。由左至右依序是 分、時、日(日期)、月、星期,以空白分隔,例如 30 3 * * 1 表示「每週一凌晨 3 點 30 分」。這套寫法很精簡,但缺點也在於此:寫錯的欄位在語法上往往仍然成立,於是工作安靜地在錯誤的時間執行,常常要過很久才被發現。

本工具讓你為五個欄位分別從「每次」「指定值」「清單」「範圍」「間隔」五種模式中選擇,並同時顯示產生的 cron 運算式與它的文字解讀。由於可以在同一個畫面上完成「輸入→運算式」與「運算式→說明」兩個方向的核對,在把它放上伺服器之前就能確認寫出來的是不是想要的。所有處理都在瀏覽器內完成,輸入的內容不會被送出去。

cron 運算式的組建方法

  1. 從預設出發 從「每天午夜 0 點」「平日 9 點」「每小時整點」「每週一」四個預設中挑最接近的,各欄位會隨之填好。比從零開始更快,也更不容易寫錯。
  2. 為每個欄位選擇模式 在分、時、日、月、星期上分別選擇每次(*)、指定值、清單、範圍或間隔(*/n)。用不到的欄位保持「每次」即可。
  3. 輸入數值 清單用逗號分隔,範圍填起點與終點,間隔填每隔幾個執行一次。分為 0〜59,時為 0〜23,日為 1〜31,月為 1〜12,星期為 0〜6(0 表示星期日)。
  4. 核對運算式與說明 把畫面上的 cron 運算式與下方的文字說明對照著讀。若說明與本意不符,就回頭修正對應的欄位。
  5. 貼進 crontab 確認無誤後複製運算式,用 crontab -e 打開表格,把它放在一行的開頭,後面寫上要執行的命令。

用好本工具的小技巧

  • 將星期欄位設定為"範圍"模式並選擇1到5,即可一步生成"週一至週五"的工作日排程。
  • "列表"模式可以用逗號分隔輸入多個值,例如在分鐘欄位輸入"0,15,30,45",效果等同於每15分鐘執行一次。
  • 如果日期欄位和星期欄位都被設定為"每次(*)"以外的值,按照標準cron規範,兩者是"或"的關係——只要滿足其中一個條件就會執行。但"間隔(*/n)"模式以"*"開頭,會被視為不受限制,與星期組合時只在兩者都滿足的日子執行("且"條件)。
  • 生成的cron表示式可以通過"複製"按鈕複製到剪貼簿,直接貼上到crontab或GitHub Actions的YAML檔案中使用。
  • 點選預設按鈕,或點選下方速查表中的某一行,都可以一鍵將常見排程應用到構建器中。

這些場景下會用到

安排備份與批次處理的時間

資料庫匯出與日誌彙總通常安排在存取量少的深夜。不必先回想語法,就能組出「每天凌晨 3 點 5 分」這樣的設定。

只在工作日執行時

把星期欄位設為 1〜5 的範圍即可限定為平日。cron 並不知道國定假日,若需要排除,請在指令碼內部自行判斷。

讀懂別人寫的運算式時

接手的伺服器 crontab 裡出現 */15 2-5 * * * 這樣的寫法時,在這裡重現同樣的設定並讀說明,就不會會錯意。

用於 CI 與容器的排程設定時

GitHub Actions 的 schedule 與 Kubernetes 的 CronJob 使用同樣的五欄位寫法。不過它們通常以 UTC 執行,記得把時欄位依時差平移。

cron 的相關術語

cron
UNIX 類系統上在指定時刻自動執行命令的常駐程式。設定寫在每個使用者各自的 crontab 表格裡。
crontab
既指排程表本身,也指用來編輯它的命令(crontab -e)。每一行由「cron 運算式 + 要執行的命令」組成。
星號(*)
表示該欄位的「所有取值」。分欄位為 * 就是每分鐘,月欄位為 * 就是每個月。
間隔(*/n)
每隔 n 個取值執行一次的寫法。分欄位的 */15 表示 0 分、15 分、30 分、45 分。起點一定是該欄位的最小值,並非「距上次執行 n 分鐘後」。
清單與範圍
清單是用逗號並列取值(1,15),範圍是用連字號相連(9-17)。兩者也可以混寫,例如 1-5,10。
同時指定日與星期
在多數 cron 實作中,若日欄位與星期欄位都不是 *,則會在任一方符合的日子執行,而不是兩者同時符合。因此 0 0 1 * 1 的意思是「每月 1 日,以及每週一」,這個組合常常造成意料之外的執行。但"間隔(*/n)"模式以"*"開頭,會被視為不受限制,與星期組合時只在兩者都滿足的日子執行("且"條件)。

常見問題

crontab條目是由5個用空格分隔的欄位組成的字串:分、時、日、月、星期。本工具讓你通過下拉選單或數值輸入分別選擇每個欄位,自動為你組裝這5個欄位,因此無需記憶語法就能生成正確的cron表示式。

將星期欄位設定為"指定值"模式並選擇1(星期一),即可生成"0 0 * * 1",只匹配週一。如果需要調整具體時刻,也請將分鐘、小時欄位設定為"指定值"模式。

將星期欄位設定為"範圍"模式,從1(星期一)到5(星期五)。但cron本身沒有節假日的概念,如果需要排除法定節假日,需要在指令碼中另外編寫判斷邏輯。

可以。它生成的是標準5欄位格式(相容Vixie cron)的cron表示式,因此可以直接用於Linux伺服器的crontab、GitHub Actions的schedule、Kubernetes的CronJob等採用相同5欄位cron語法的多種環境。
工具君

閒話 ― 為什麼"寫"cron表示式比"讀"更難

cron表示式看似只要記住5個欄位就能寫出來,但真正動手寫時,往往需要回憶"*/15"和"1-30/5"哪個才是正確寫法、星期是從0開始還是從1開始等細節,出錯的機率意外地高。相反,理解一段已有cron表示式的含義(本站的Cron表示式解析器所承擔的任務)相對機械,只需按順序逐個欄位理解即可。

本工具正是著眼於這種不對稱性,專注於支援"從UI選擇構建"cron表示式這一方向的操作。使用者可以通過下拉選單和數值輸入直接表達意圖(例如"想在工作日9點執行"),工具會自動組裝出滿足該意圖的cron表示式,從而徹底免除記憶語法的負擔。

作為確認生成結果是否符合預期的最後一步,本工具還提供了接下來5次執行時間的預覽功能。尤其是當日期欄位和星期欄位同時被限制時會構成容易被忽視的"或"條件,能夠直接看到實際的候選執行時間,有助於提前發現執行頻率與預期不符的問題。但"間隔(*/n)"模式以"*"開頭,會被視為不受限制,與星期組合時只在兩者都滿足的日子執行("且"條件)。