線上 cron 解析器是一種基於瀏覽器的驗證工具,接受經典的五欄 crontab 運算式,確認每個欄位是否落在允許範圍內,正規化空白,並以本地與 UTC 兩種時鐘格式列出接下來五次符合的執行時間。五欄 cron 運算式正好包含分鐘、小時、日期、月份與星期,每個欄位以空格分隔,而解析器會在嘗試任何計算之前強制檢查這個結構。線上工具的價值在於快速的回饋:貼上排程、查看每個欄位是否選中你預期的內容,然後帶著「底層排程器下次會在何時觸發工作」的確定離開。Cron Parser 正是這樣運作,並遵循 Cronie 風格的規則文件,包括兩個日期欄位同時受到限制時常被誤解的 OR 行為。它在本機瀏覽器中執行,不會執行或儲存運算式,並產生一個正規化形式以及每個欄位的白話摘要。

cron parser online
cron parser online

Cron 解析器實際做些什麼

Cron Parser 接受一串正好由五個以空白分隔的欄位組成的字串,根據傳統的數值範圍解析每個欄位,並回報輸入的正規化形式以及每個欄位選取內容的簡易語言摘要。接著它會列舉未來的分鐘(以 UTC 表示),直到找到五次符合的時間或是在五年安全上限後停止。實務上你會比較兩個輸出:瀏覽器的本地時鐘以及對應的 UTC 時間戳,這讓你很容易對照另一個時區的伺服器來確認結果。

由於引擎會迭代實際的 UTC 瞬間,日光節約時間的切換在計算過程中絕不會產生跳過或重複的執行;解析器改為交給你一個確定性的清單,並信任你會去驗證實際執行工作的排程器所設定的時區。日曆有效性委派給 JavaScript Date 物件,因此第 31 天會自然跳過沒有 31 號的月份,而二月的規則則會考慮閏年。解析器不會呼叫任何伺服器、不執行命令、也不會在任何地方保存運算式。一切都在你的瀏覽器分頁中發生,而你輸入的內容僅被視為純文字。

經典五欄格式及其範圍

傳統 crontab 語法以固定順序使用五個欄位:分鐘、小時、日期、月份與星期。任何其他格式(包括前綴的秒數欄位或後綴的年份欄位)都被視為非經典方言,並在任何欄位展開之前遭到拒絕。每個欄位都有記載的數值範圍,下表彙總了解析器實際檢查的確切邊界。兩個星期值 0 與 7 都被視為星期日,因此 0 0 * * 7 與 0 0 * * 0 的行為完全相同。

解析器不會默默地強制轉換其他數字,因此月份欄位中的 13 或分鐘欄位中的 60 這類數值,會產生一則明確指向問題欄位的拒絕訊息。空白的清單項目、第五個欄位之後多餘的命令文字,以及任何不是正好五個欄位的數量同樣會遭到拒絕。這些限制的存在,是因為解析器刻意只鎖定可攜的數值核心,而非所有 cron 方言。

欄位順序有效值備註
分鐘10 至 59僅限整數分鐘,不接受小數
小時20 至 2324 小時制
日期31 至 31沒有該日期的月份會自動跳過
月份41 至 12不接受 JAN 等英文名稱
星期50 至 70 與 7 都代表星期日

接受的語法:萬用字元、清單、範圍與步進

在任一欄位中,你可以混用四種權杖。星號 * 代表該欄位允許的所有值。以逗號分隔的清單可結合個別值與可選的範圍,例如 0,15,30,45 或 8-12,14,18-20。像 10-50 這種包含端點的數值範圍,會選取從起始到結束之間的每個整數。步進運算式會在星號或範圍後附加 /N,從欄位最小值或範圍起始處開始,每隔 N 個值選取一次。

舉例來說,分鐘欄位中的 */15 會展開為 0、15、30、45,因為它從欄位最小值 0 開始,每隔 15 個值計數一次,直到欄位最大值 59 為止。像 10-50/20 這種帶步進的範圍會計算為 10、30、50;步進從範圍起點開始,且永遠不會超過範圍終點。這些是相同語法的標準展開,並非每次計算的結果。遞減範圍、零或負數的步進、空白的清單項目,以及超出欄位範圍的值都會以明確的錯誤訊息遭到拒絕,讓你能立即修正出問題的欄位。

權杖意義範例結果
數字單一值55
*所有值*所有允許的值
清單多個值0,15,30,450, 15, 30, 45
範圍包含端點的範圍8-128, 9, 10, 11, 12
步進每隔 N 個值*/15從 0 開始每隔 15

如何驗證運算式並讀取接下來五次執行

開啟工具,將運算式貼到輸入欄,然後檢視解析器為它產生的三個輸出:正規化字串、各欄位摘要,以及接下來的執行時間表。以下步驟將逐步說明你在部署排程前每次都應遵循的工作流程。

  1. 依序輸入正好五個欄位:分鐘、小時、日期、月份與星期,以單一空格分隔。多餘的空格會被正規化移除;任何不是五個欄位的情況會在任何欄位展開之前遭到拒絕。
  2. 每個欄位由數值、* 萬用字元、逗號清單、包含端點的範圍,或像 */15 這類正數步進所組成。請避免使用 JAN 或 MON 這類名稱,因為經典解析器不接受月份或星期的英文名稱。
  3. 讀取正規化運算式以確認空白與星期處理方式,接著讀取欄位摘要以確認每個欄位選取了你預期的值。摘要是最快找出「欄位放錯位置」的方式。
  4. 同時檢視你瀏覽器本地時間與 ISO UTC 時間戳格式下的接下來五次執行時間。本地與 UTC 輸出會依據你的時差以及該瞬間所適用的日光節約位移而有所不同。
  5. 無論實際執行工作的排程器是 Cronie、Vixie cron、systemd timers 或雲端排程器,都請將運算式與時區與其說明文件相互核對。解析器輸出只是驗證,並非部署。

閱讀接下來執行時間表的一個實用方式是依本地時鐘排序輸出,確認第一列與你從運算式預期的結果一致,再快速看一下 UTC 欄,確認絕對時間點與伺服器端的參考一致。如果你的瀏覽器在第二列顯示 2026-03-08T14:00:00Z,那麼設定為 UTC 的伺服器就應該會恰好在該瞬間觸發。

日期與星期的 OR 語意

傳統 cron 的行為記載於 Cronie crontab 手冊,並重現於 Oracle Linux cron 指南 等廠商文件中:當兩個日期欄位同時受到限制時,會以 OR 方式處理。例如,一條選取每月 21 號與週一的規則,會在每個週一觸發,也會在 21 號觸發,無論該日期是星期幾。Cron Parser 實作了這種 OR 行為,而非要求兩個欄位同時符合。當其中一個日期欄位為萬用字元時,僅由受限的那個欄位決定是否符合。

如果你需要 AND 語意,請將其中一個欄位限制為單一值,並在另一個欄位使用萬用字元,或將工作拆成兩個帶有重疊條件的排程項目。誤解這條規則是「cron 工作在錯誤的日子執行」事件最常見的原因,而解析器輸出中的逐欄位摘要正是設計用來在工作進入正式環境之前浮現這個錯誤。

解析器刻意拒絕的內容

解析器鎖定的是 cron 可攜的數值核心,並刻意忽略各產品間不同的延伸功能。它不接受 JAN 或 MON 等月份與星期的英文名稱、不接受 @daily 或 @reboot 等暱稱、不接受秒數或年份欄位、不接受 Quartz 的問號、不接受「本月最後一天」語法、不接受雜湊排程、不接受隨機範圍,也不接受廠商巨集。五欄運算式若丟進六欄或七欄的排程器,可能會被悄悄重新解讀或拒絕,因此請務必閱讀目標產品的說明文件。

日期欄位語意也是如此:雲端排程器可能將「日期」與「星期」視為 AND 而非記載中的 OR,這會改變工作執行的時間,即使運算式看起來是有效的。Quartz、Kubernetes CronJobs、AWS EventBridge 與各家 CI 服務都會在經典格式之上疊加各自的慣例,而解析器的輸出僅驗證經典形式。一旦運算式通過驗證,下一步要決定的是目的地是否根本支援該形式。

部署前與你的排程器進行確認

任何解析器的輸出都是驗證輔助,並非部署保證。在你推出關鍵的備份、計費、通知或維護工作之前,請對將執行它的排程器確認三件事:支援的欄位數量與延伸功能、設定的時區與日光節約原則,以及記載中的日期欄位語意。如果這三點與解析器顯示的內容一致,那麼接下來執行時間表就會是排程器實際遵循的排程。如果其中任何一點不同,請調整運算式或選擇為該方言打造的工具。

配套的 Cron Expression Generator 協助你從易讀的描述建立經典五欄排程,這是在你了解每個欄位的選取內容之後,自然的下一步。請將解析器視為最後的校對,而非第一步:建立運算式、貼入解析器、確認欄位摘要、將接下來五次執行與你的預期進行比對,然後再部署。

延伸閱讀:Cron Parser 替代方案:五個欄位,無需套件。

延伸閱讀:Cron Parser API 替代方案:在瀏覽器中本機驗證。