免費線上 Crontab 和 Cron 表達式解譯器
像 0 */5 * * * 這樣的 Cron 表達式緊湊但神秘。 Dokall 將任何有效的 cron 表達式轉換為人類可讀的文字並顯示即將到來的運行時間,以便您可以在部署之前驗證計劃。
DevOps 工程師和後端開發人員使用此工具來仔細檢查計劃的作業、偵錯計時問題並為團隊記錄 cron 配置。
什麼是 Cron?
Cron 是類 Unix 操作系統中基於時間的任務調度器。它在預定時間自動運行命令或腳本——每分鐘、每天午夜、每週一上午 9 點,或你能表達的任何其他計劃。cron 守護進程在後台運行,每分鐘檢查一次計劃。
每個用户都有一個 crontab(cron 表)檔案,列出其計劃任務。系統級 cron 任務位於 /etc/crontab 和 /etc/cron.d/。cron 系統是服務器管理的基礎——它處理日誌輪轉、備份、數據庫維護、郵件報告、快取清理以及無數其他自動化任務。
Cron 表達式格式
標準 cron 表達式有五個以空格分隔的字段:分鐘(0–59)、小時(0–23)、日(1–31)、月(1–12)和星期(0–7,其中 0 和 7 都表示星期日)。
每個字段可以是具體值(5)、範圍(1–5)、列表(1,3,5)、步進(*/5),或星號(*)表示所有值。表達式 30 2 * * 1 表示「週一凌晨 2:30」。表達式 0 */4 * * * 表示「每第 4 個小時的第 0 分鐘」(午夜、凌晨 4 點、上午 8 點、中午、下午 4 點、晚上 8 點)。
某些 cron 實現(如 Quartz)會增加第六個字段表示秒,以及第七個字段表示年。AWS CloudWatch Events 和 GitHub Actions 使用略有不同的語法。本工具解析標準的 5 字段 Unix cron 表達式。
Cron 表達式中的特殊字符
星號(*)表示「每一個」。小時字段中的 * 表示每小時。星期字段中的 * 表示每天。
逗號(,)分隔列表值。星期字段中的 1,3,5 表示週一、週三和週五。
連字符(-)定義範圍。小時字段中的 9-17 表示從上午 9 點到下午 5 點的每個小時。
斜槓(/)定義步進。分鐘字段中的 */5 表示每第 5 分鐘(0、5、10、15…)。1-30/2 表示從 1 到 30 每隔 2 分鐘(1、3、5、7…)。
某些實現支持額外字符:L(月末最後一天)、W(最近工作日)、#(月第 n 個星期幾,例如 2#1 = 第一個週一),以及 ?(無特定值,在已指定另一個日期字段時使用)。
常用 Cron 計劃
每分鐘:* * * * * —— 適用於健康檢查和實時監控,但需考慮負載。
每 5 分鐘:*/5 * * * * —— 輪詢、快取更新和隊列處理的常用間隔。
每小時:0 * * * * —— 在每小時的第 0 分鐘運行。適合小時級報告和數據同步。
每天午夜:0 0 * * * —— 經典的每日任務,用於備份、日誌輪轉和報告。
每個工作日上午 9 點:0 9 * * 1-5 —— 週一至週五運行。常用於工作時間任務和每日通知。
每月第一天:0 0 1 * * —— 在 1 號午夜運行。適合月度計費、報告和清理。
每週日凌晨 2 點:0 2 * * 0 —— 每週維護窗口。選擇流量較低的時間。
Cron 最佳實踐
始終將輸出重定向到日誌檔案:*/5 * * * * /path/to/script.sh >> /var/log/myjob.log 2>&1。沒有重定向時,cron 會通過郵件發送輸出(或在未配置郵件時靜默丟棄),你會丟失調試資訊。
對命令和檔案使用絕對路徑。Cron 以最小環境運行——你的 PATH 可能不包含 /usr/local/bin 或交互式 shell 中使用的其他目錄。指定完整路徑,或在 crontab 頂部設定 PATH。
添加錯誤處理和鎖定。如果任務運行時間長於間隔,下一次調用會在第一次仍在運行時啓動。使用 flock 或 PID 檔案防止重疊:* * * * * flock -n /tmp/myjob.lock /path/to/script.sh。
部署前測試計劃。將 cron 表達式粘貼到本解釋器中,確認下次運行時間符合預期。常見錯誤是混淆日字段和星期字段。
監控你的 cron 任務。使用 cron 監控服務(Cronitor、Healthchecks.io),在計劃任務未運行或耗時過長時向你發出警報。