Cron 格式轉換器
在經典的 5 字段 Unix cron 與 6 字段 Quartz / Spring 风格之間轉換(秒在前;當 day-of-month 與 day-of-week 衝突時使用 ?)。
Quartz(6 個字段:sec min hour dom mon dow)
0 0 9 ? * 1-5
使用方法
- 貼上您的 cron 表達式並選擇來源格式和目標格式(Unix、Quartz 或 Spring)。
- 檢查轉換後的表達式,注意新增或刪除的秒字段。
- 驗證特殊字符,如
?、L和#,這些字符存在於 Quartz/Spring 中,但不存在於標準 Unix cron 中。
常見問题
Unix 和 Quartz cron 有什麼不同?
Unix cron 使用 5 個欄位(分鐘到工作日)。 Quartz 使用 6 或 7 個字段,添加一個前導秒字段和一個可選的尾隨年份,以及額外的字符,如?、L、W 和 #。
為什麼 Spring cron 有 6 個欄位?
Spring 的調度程式首先需要秒字段,因此 Spring 表達式有 6 個字段:秒、分、小時、月份中的某一天、月份和星期幾。
每個表達式都能乾淨地轉換嗎?
大多數都可以,但是 Quartz/Spring 獨有的功能,例如 L(最後一個)或 #(第 n 個工作天)沒有 Unix 等效項,需要手動檢查。
介紹
cron 格式轉換器彌合了 Unix cron、Quartz (Java) 和 Spring 調度程式之間的差異。將 Linux crontab 中的表達式直接複製到 Quartz 作業中是一個典型的錯誤 - 字段計數不同,並且缺少秒字段會改變一切。
按格式劃分的欄位計數
| Format | Fields | Order |
|---|---|---|
| Unix | 5 | 分鐘、小時、日、月、工作日 |
| Spring | 6 | 秒、分、時、日、月、工作日 |
| Quartz | 6-7 | 秒、分、時、日、月、工作日、(年) |
因此 Unix0 9 * * 1-5變成 Spring0 0 9 * * 1-5(前置了0秒欄位)。
值得關注的特殊字符
| 字元 | 說明 | 支援於 |
|---|---|---|
? |
無具體數值 | 石英、彈簧 |
L |
最後一天/工作日 | 石英、彈簧 |
W |
最近的工作日 | Quartz |
# |
每月第 N 個工作天 | 石英、彈簧 |
標準 Unix cron 不理解這些,因此將它們轉換為 Unix 需要手動解決方法。
常見用例
- 將 Linux crontab 計畫移植到 Spring
@Scheduled註解中。 - 將 Quartz 作業移轉到基於 Unix 的排程器或容器 CronJob。
- 跨多語言堆疊協調時間表。
最佳實踐
- 轉換為 Unix 或從 Unix 轉換後,請務必仔細檢查秒字段。
- 標記任何
L、W或#用法以進行手動審查 — 沒有乾淨的 Unix 等效項。 - 使用cron expression validator驗證結果並使用cron next run calculator確認時序。