開發者工具 · Crontab 產生器
Cron 步驟與範圍語法:*/15, 1-5,清單及其組合方式
· 工作原理
規劃任務 調度 開發人員工作流程
步驟、範圍和清單是人們在不理解的情況下複製的 cron 語法的一部分。這篇文章解釋了每一個,它們如何築巢,以及像 */7 這樣的驚喜,而不是「每 7 天」的意思。
每 15 分鐘,但只有 9 到 5 — 天真的表達在晚上也會觸發
“办公時間每十五分钟一次”包含两個独立的限制。分鐘欄位需要刻鐘標記,而小時欄位需要有界的跨度。僅寫入 `*/15 * * * *` 解決了前半部分的問題,並仍然會產生整個晚上的執行。該表達式必須在表達有關工作日的任何內容之前對這兩個約束進行編碼。
ToolAcre 解析五個計劃欄位,而不是命令。從 `*/15 9-17 * * 1-5` 開始,然後檢查句子和下次執行預覽。此檢查發現了將 `9-17` 放在分鐘位置或不限制工作日欄位的常見錯誤。產生器建立並解釋一個表達式;它不安裝或執行作業。
範圍 — 1-5 和 9-17 作為單一欄位中的包含範圍
連字符在一個欄位內建立一個包含範圍。小時位置中的 `9-17` 擴充為九個值:9 到 17。同樣,工作日位置的 `1-5` 擴展到星期一到星期五,因為此解析器將星期日映射到 0,星期一映射到 1 等等。兩個端點都參與,因此 17:00 在選定的小時範圍內。
範圍不能跨越欄位邊界。解析器拒絕後向形式,例如 `17-9` 並建議將所需值拆分為兩個清單項目。這種拒絕很有用,因為調度產品之間的包裝規則不同。這裡,範圍總是在已經滿足欄位的數字或可接受的名稱限制的值之間向上移動。
步驟 - */15 和 9-17/2, 以及為什麼步驟在欄位的下限處重新啟動而不是連續計數
斜線從起點開始選擇每第 n 個值。`*/15`分鐘欄位從最小值零開始,擴展到 0、15、30 和 45。`9-17/2`從 9 開始,產生 9、11、13、15 和 17。該步驟屬於一個字段;它不計算跨小時界限的經過分鐘數。
解析器也接受一個簡單的步驟開始。分鐘欄位中的 `5/15` 表示 5、20、35 和 50,因為隱含上端點是 59。步驟必須是正整數,並不能超過欄位的整個範圍的大小。零、非數字或過大的步驟會收到特定於欄位的驗證錯誤,而不是猜測的解釋。
列表可以在一個欄位中組合值、範圍和步進範圍
逗号將同一欄位中的多個部分聯合起來。一個簡單的 `1,15,30` 命名了三個分鐘值。更精細的輸入可以組合單獨值、包含範圍和步驟範圍:測試的 `0,10-20/5,59` 擴展為 0、10、15、20 和 59。在以後的計算使用它們之前,重複的結果將被刪除,擴展的值將被排序。
這種語法是組合語法,但仍然很狹窄。每個逗號項可以包含一個斜杠,並範圍必須恰好有兩個非空端點。雜散逗號、多個斜線或未完成的範圍將被拒絕,並給出命名欄位的原因。這使得混合表達式可以審閱,而無需假裝格式錯誤的標點符號具有常規含義。
工作範例: */15 9-17 * * 1-5 — 枚舉它產生的分鐘數和 17:45 邊緣情況
對於 `*/15 9-17 * * 1-5`,分鐘值為 00、15、30 和 45;時間為 09 至 17;在每個包含的工作日,第一個候選人是 09:00,最後一個候選人是 17:45。沒有 18:00 因為 18 超出了小時範圍。
最後執行的邊緣說明了為什麼欄位擴展勝過會話速記。對一位讀者來說,「朝九晚五」可能意味著停在 17:00 ,而對另一位讀者來說,則意味著包括完整的五點時間。 Cron 的小時欄位選擇一個小時桶,然後分鐘欄位選擇其中的位置。如果 17:45 是不需要的,則所需的邊界需要不同的表達式或命令端邏輯。
每月某天的步驟從每個月的 1 日開始擴展;這不是經過一周的間隔
`*/7`in day-of-month 從該欄位的最小值 1 開始擴展,在這些日期存在的情況下產生 1、8、15、22 和 29。當下個月開始時,該字段再次從 1 開始。因此,它描述選定的日曆日期,而不是連續前進的 7 天間隔。二月和較短的月份只是缺少一些重要的日期。
相同的語法在另一個欄位中具有不同的起始值。 `*/7` 分鐘從 0 開始,而每月的 `*/7` 天從 1 開始。 ToolAcre 的解析器從每個欄位規格中匯出序列,其預覽搜尋日曆日期。對於實際的每週節奏,限制一周中的某天,而不是將每月某天的步進視為經過的持續時間。
不支援的運算符會被拒絕,而不是解釋為另一種 cron 方言
此五個欄位解析器不實作 `L`、`W`、`#` 或 `?`。這些字元不會被默默丟棄,也不會以可移植的 crontab 語法形式呈現。六個欄位也被拒絕,並解釋說額外的領先位置屬於面向秒的調度程序風格,而不是該路由讀取的格式。
邊界是經過深思熟慮的:分鐘、小時、月份、月份和星期幾是這裡完整的位置語法。在從另一個調度程序移動表達式之前,計算其欄位並識別其運算符。產生器可以驗證自己的方言;它無法驗證 Quartz、systemd 日曆語法或雲端服務的變體。
重點:步驟的意思是「從範圍的底部開始」—產生器用您可以檢查的單字解釋了步驟表達式
範圍定義包含範圍、逗號合併片段以及從特定欄位開始的斜線範例值。以該順序讀取這些操作會將密集標記轉換為可檢查的有限集。它還解釋了諸如 17:45 之類的邊緣,而不依賴於作者可能有其他含義的複製短語。
使用產生器作為檢視介面:輸入表達式、閱讀說明、檢查警告並比較預期區域中接下來的五個掛鐘執行。然後將經過驗證的五個欄位放在您自己的環境中的真實命令旁邊。進度表建置和工作執行仍然是獨立的職責。