Quartz cron 運算式只有在它的欄位結構、平易英文語意,以及實際未來觸發時間與目標 Quartz 排程器中預定的排程一致時,才算完整檢查通過。Quartz Cron 運算式產生器在本地端建立確定性的部分:選擇排程形狀、只輸入顯示的欄位、產生字串、閱讀平易英文摘要,然後複製結果。它永遠會輸出六個必要欄位——秒、分、時、日期、月份和星期——並且只有在提供有效年份時才會加上選用的第七個年份欄位。這個結果並非執行預測:此工具完全在瀏覽器中執行,不會建立、部署或執行作業。請先檢視確切的字串與摘要,再於將執行該觸發器的 Quartz 環境中測試多個即將到來的觸發時間、設定的時區、夏令行為以及錯失觸發(misfire)處理方式。那些屬於排程器層級的檢查,能夠揭示單純語法驗證無法發現的行為。

在產生的字串中要檢查的項目
Quartz cron 並非傳統的五欄位 Unix 格式。請依 Quartz 順序由左至右讀取結果,而不是預設「分」在最前面。產生的日期欄位刻意成對出現,使其中一個帶有排程限制,而另一個在適當時填入問號。
| 位置 | Quartz 欄位 | 檢查重點 |
|---|---|---|
| 1 | 秒(Seconds) | 確認必要的秒欄位出現在分之前。 |
| 2 | 分(Minutes) | 檢查所選的分鐘或允許的分鐘遞增值。 |
| 3 | 時(Hours) | 確認小時值,或確認每小時規則並未限制小時。 |
| 4 | 日期(Day of month) | 檢視指定的日期數字或最後一天的 L。以星期為主的規則導向那個必要欄位使用 ?。 |
| 5 | 月份(Month) | 確認月份欄位符合預定的每月規則。 |
| 6 | 星期(Day of week) | 檢查具名的工作日、MON-FRI、?,或使用 # 的支援 nth-weekday 運算式。 |
| 7 | 年份(Year) | 確認此選用欄位只有在提供有效年份時才出現。 |
問號是有意為之,而不是缺漏的值。當星期欄位帶有規則時,日期欄位會變成 ?。當數字日期或當月最後一天帶有月規則時,星期欄位會變成 ?。每日與每小時的形式使用文件記載的萬用字元與問號配對。請依相同欄位對照平易英文摘要,但僅將其當作檢視輔助,而不是觸發器將如預期執行的證明。
將輸出對應到預定排程
在複製之前,請將產生的結果與商業規則進行比對。每個支援的排程形狀有不同的對應關係,值得各自檢查。
| 排程選擇 | 產生的對應關係 | 要確認的內容 |
|---|---|---|
| 秒間隔(Seconds interval) | 產生從零開始的秒遞增。 | 所選的遞增代表預定的頻率。 |
| 分間隔(Minutes interval) | 產生從零開始的分遞增。 | 起始點與頻率符合規則。 |
| 每小時(Hourly) | 固定分鐘,不限制小時。 | 作業應在每個所選小時重複執行。 |
| 每日(Daily) | 設定一個小時與分鐘。 | 兩個值皆代表預定的當地牆上時間。 |
| 工作日(Weekdays) | 星期欄位使用 MON-FRI,日期欄位使用 ?。 | 該規則真正代表工作日,而非一週七天的每日執行。 |
| 每週(Weekly) | 使用一個具名的工作日,日期欄位使用 ?。 | 輸出的 SUN 至 SAT 名稱為預定的那一天。 |
| 指定月份日期(Numbered monthly day) | 使用所選的日期,星期欄位使用 ?。 | 該數字日期在預定的月份中有效。 |
| 最後一天或第 n 個工作日(Last day or nth weekday) | 最後一天使用 L,所選工作日出現位置使用 #。 | 每月商業規則符合所使用的 Quartz 擴充。 |
像 31 這樣的數字日期在較短的月份中本來就沒有對應日期,而產生器並不會將其改寫為當月最後一天。當這就是預定規則時,請選擇明確的最後一天選項。年份留白代表每個支援的年份,而非只有當前年份。設定年份限制可能會導致觸發器在該年份之後停止觸發。
產生並驗證運算式
- 選擇 Quartz 排程形狀,並只輸入顯示的欄位。請選擇符合需求的間隔、每小時、每日、工作日、每週或每月規則。對於每月排程,請決定限制為數字日期、使用 L 的最後一天,或使用 # 的第 n 個工作日。不要憑記憶加入未支援的欄位。
- 產生運算式並執行靜態檢查。確認六個必要欄位以秒至星期欄位的順序出現。檢查日期欄位是否為預期的 ? 配對,確認選用的年份只在要求時出現,並完整閱讀平易英文摘要。請仔細檢查工作日名稱,因為 Quartz 輸出的名稱是 SUN 至 SAT,而不是依賴數字工作日慣例。
- 複製確切的字串,並在目標 Quartz 排程器中進行測試。請勿僅因其他排程器也使用「cron」一詞便將其貼入。請在將執行該作業的排程器設定下,測試接下來數次的觸發時間,並將時區、觸發器開始時間、行事曆排除與錯失觸發指令連同結果一併記錄。
產生器無法獨力完成的檢查
正確的運算式字串只是驗證的一個層級。實際行為取決於 Quartz 版本、觸發器設定、排程器狀態以及周邊的應用程式。請在產生後使用以下檢查。
- 未來觸發時間:產生器不會計算即將發生的觸發時間。請在將執行該作業的同一個 Quartz 環境中,檢視接下來數次計算出的觸發時間,並與預定排程進行比對。
- 時區:運算式本身不含時區。時區與夏令行為由觸發器和排程器設定決定。如需了解瀏覽器與排程器設定之間的差異,請參閱Quartz Cron 運算式是否使用您的瀏覽器時區?。
- 夏令時間轉換:請在任何相關的轉換時段進行測試,因為當地牆上時間可能被跳過或重複。僅憑運算式字串無法顯示 Quartz 將使用哪一次觸發。
- 錯失觸發政策(Misfire policy):請確認設定的錯失觸發指令,並觀察觸發器在錯過預定時間後的行為。產生有效的語法並不會自動選擇錯失觸發政策。
- 執行階段情境:請檢視 Quartz 版本、觸發器開始時間、行事曆排除、排程器時區以及應用程式生命週期。這些因素會影響作業是否以及何時實際執行。
受限的輸入與不支援的 Quartz 組合
本聚焦的產生器僅對其支援的排程選擇與欄位範圍產生確定性的輸出。在預期得到特定運算式之前,請先檢查以下邊界:
- 數值範圍:間隔必須為 1 至 59,分鐘為 0 至 59,小時為 0 至 23,指定月份日期為 1 至 31,第 n 次出現為 1 至 5。選用的年份必須為空白,或介於 1970 至 2099 之間。
- 驗證行為:數值輸入在輸出前會進行驗證。無效的值不會被悄悄限制範圍,因此輸出並不會隱藏超出範圍的項目。
- 聚焦的語法:建立器刻意不會產生 nearest-weekday W、L 的偏移量、任意清單、月份名稱、多重範圍、混合遞增、行事曆,或手動編輯的專家運算式。
- 進階需求:如果排程需要上述任一不支援的組合,請使用官方 Quartz 文件以及專案層級的測試,而非強行將排程套入不同的規則形狀。
啟用作業前的通過/失敗檢視
只有在三個層級一致時,才能視為產生作業完成:所選的商業排程、產生的字串與摘要,以及目標 Quartz 環境中的範例觸發時間。同時請確認觸發器開始時間、時區、行事曆排除、夏令時間預期以及錯失觸發政策皆已記錄。如果有任何層級不一致,請修正排程並重新產生,而非僅憑語法就啟用作業。
如需權威的欄位定義,請將結果與官方 Quartz 2.5 CronTrigger 教學進行比對。如需了解實作層級的語法行為,請參閱Quartz CronExpression 原始碼。這些參考資料可支援檢視工作,但決定性的執行檢查仍應在將執行該作業的 Quartz 環境中進行。