開發者工具 · Crontab 產生器
crontab(5) 欄位:POSIX 指定的內容以及 Vixie 擴充功能是什麼
· 背景
規劃任務 可移植性 驗證
並非每個 cron 功能都是標準的。這篇文章將 POSIX crontab 規範要求的內容與 Vixie cron 新增的和大多數 Linux 系統採用的擴充(步驟、名稱、暱稱)分開。
另一個調度程序仍可能不支援有效的 ToolAcre 表達式
透過 ToolAcre 的調度已滿足此解析器,但並非每個 cron 實作都滿足。可移植性始於這個謙虛的宣告。此路由僅接受五個欄位和定義的令牌語法。目標裝置、服務或框架可以接受更少、更多或結構上不同的東西。
將瀏覽器結果保留為證據:表達、描述、警告和預覽區域。在部署之前,比較目標檔案並執行無害的測試。只有當本地綠色訊號提升為通用相容性保證時,驗證才會變得危險。
儲存庫未建立 POSIX 要求的內容
此工作簿將 POSIX 要求與擴充分開,但儲存庫來源中沒有出現 POSIX 規範。 ToolAcre 的行為無法證明標準要求哪些功能。因此,本節描述已實現的語法,但未將其指派給標準主體。
實現的數字範圍為 0–59 分鐘、0–23 小時、1–31 每月天數、1–12 個月和 0–7工作日。通配符、單一值、包含範圍、逗號清單、通配符步驟、範圍步驟和帶有步驟的裸起始值都經過解析和測試。
名稱、步驟、星期日 7 和別名在這裡實現,沒有標準歷史宣告
月份名稱 JAN 到 DEC 以及工作日名稱 SUN 到 SAT 不區分大小寫。名稱可以單獨出現、出現在清單中或出現在範圍中。工作日 7 被接受為星期日並標準化為 0。這些是 `parseField` 的可觀察屬性,無論另一個實作如何對它們進行分類。
別名表擴充 `@yearly`、`@annually`、`@monthly`、`@weekly`、`@daily`、`@midnight` 與 `@hourly`。 `@reboot` 被故意拒絕,因為它沒有可供預覽的日曆時間表。未知的 at 符號字會收到命名受支援清單的錯誤。
環境分配支援在此解析器之外
環境分配不是此表達式語法的一部分。輸入框需要一個計劃,`parseCron` 在解析支援的別名後將其分成五個部分。無法透過此路由測試 `KEY=value` 行的擴充、引用或可移植性。
這項遺漏可以防止錯誤的標準宣告。完整的 crontab 檔案可以包含純表達式工具永遠不會看到的結構。針對目標分別檢查這些內容。 ToolAcre 的精確欄位錯誤不應被重新用作對較大檔案中不相關行的判斷。
檢查目標語法並使用無害的時間表測試
目標檢查應從欄位計數和運算子開始。確認是否接受名稱、Sunday 7、斜線步驟和 at 符號別名。然後在近期安裝一個無害的可觀察操作,在捕獲證據後將其刪除,並將目標結果與預期表達進行比較。
不要使用敏感命令或等待罕見的年度日期來測試可移植性。選擇區分語法支援的最小安全探針。 ToolAcre 可以幫助建立該計劃並解釋它,而目標執行則建立瀏覽器無法知道的部分。
工作範例:ToolAcre 語法下的步驟形式和明確列表
每五分鐘,ToolAcre 就會接受 `*/5 * * * *`。它也接受明確分鐘清單 `0,5,10,15,20,25,30,35,40,45,50,55 * * * *`。解析將兩個分鐘欄位擴展為相同的 12 個值,因此它們的下一次執行候選者在相同的起始時刻和區域下匹配。
當目標缺乏步驟語法時,顯式清單可以作為後備候選者,但此儲存庫無法證明該目標的清單支援。在 ToolAcre 中比較兩種形式的語意等效性,然後驗證目標檔案的形式。這裡的等價性並不是那裡的可移植性證明。
六欄位語法被拒絕;此處未記錄其外部語義
不接受第六個欄位。此錯誤表示前導秒樣式屬於 Quartz 或類似 systemd 的輸入,但解析器不會實作這些語法。它沒有年份欄位,也沒有 `?`、`L`、`W` 或 `#` 運算子。
在嘗試翻譯之前計算欄位數。如果不支援的語法帶有調度含義,則明顯的五欄位重寫可能是有損的。使用來源調度程式的檔案和測試,然後僅表達 ToolAcre 目標語法可表示的需求。其他任何事情都應該保持明顯的不相容性。
重點:了解哪些功能是擴展,並在可移植性很重要時使用產生器來建立和檢查這兩種表單
可移植性是一種比較,而不是嵌入表達式中的標籤。 ToolAcre 提供了一個經過充分測試的一側:五個位置、數字邊界、選定的名稱、可組合範圍/lists/steps 和七個別名。它也明確拒絕畸形或外來形式。
利用那個契約進行精確推理,然後驗證對方。明確列表和步驟在此解析器中可以是相同的,而在其他地方只有一個有效。報告方言邊界比調用本文並未實際引用的標準更具可操作性。