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 運算式的組建方法
- 從預設出發 從「每天午夜 0 點」「平日 9 點」「每小時整點」「每週一」四個預設中挑最接近的,各欄位會隨之填好。比從零開始更快,也更不容易寫錯。
- 為每個欄位選擇模式 在分、時、日、月、星期上分別選擇每次(*)、指定值、清單、範圍或間隔(*/n)。用不到的欄位保持「每次」即可。
- 輸入數值 清單用逗號分隔,範圍填起點與終點,間隔填每隔幾個執行一次。分為 0〜59,時為 0〜23,日為 1〜31,月為 1〜12,星期為 0〜6(0 表示星期日)。
- 核對運算式與說明 把畫面上的 cron 運算式與下方的文字說明對照著讀。若說明與本意不符,就回頭修正對應的欄位。
-
貼進 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)"模式以"*"開頭,會被視為不受限制,與星期組合時只在兩者都滿足的日子執行("且"條件)。
常見問題
閒話 ― 為什麼"寫"cron表示式比"讀"更難
cron表示式看似只要記住5個欄位就能寫出來,但真正動手寫時,往往需要回憶"*/15"和"1-30/5"哪個才是正確寫法、星期是從0開始還是從1開始等細節,出錯的機率意外地高。相反,理解一段已有cron表示式的含義(本站的Cron表示式解析器所承擔的任務)相對機械,只需按順序逐個欄位理解即可。
本工具正是著眼於這種不對稱性,專注於支援"從UI選擇構建"cron表示式這一方向的操作。使用者可以通過下拉選單和數值輸入直接表達意圖(例如"想在工作日9點執行"),工具會自動組裝出滿足該意圖的cron表示式,從而徹底免除記憶語法的負擔。
作為確認生成結果是否符合預期的最後一步,本工具還提供了接下來5次執行時間的預覽功能。尤其是當日期欄位和星期欄位同時被限制時會構成容易被忽視的"或"條件,能夠直接看到實際的候選執行時間,有助於提前發現執行頻率與預期不符的問題。但"間隔(*/n)"模式以"*"開頭,會被視為不受限制,與星期組合時只在兩者都滿足的日子執行("且"條件)。