日期、時間與排程
檢查工作日 9 點至 17 點時段每 15 分鐘的 Cron
使用工具
想在工作日早晨備份,複製 Cron 式很容易,但認出五個欄位不等於日期正確。加入星期可能增加執行日,起點相同的候選被排除也容易誤以為出錯。既要讀運算式,也要看實際日期。
先列三個工作日上午九點
0 9 * * 1-5輸入運算式,選 Asia/Tokyo、起點 2024-01-05T00:00:00Z、三筆候選。起點是東京週五九點,結果為一月八、九、十日 00:00:00Z,即東京週一至週三九點。Z 表示 UTC,別誤讀為當地午夜。
這裡排除週末,不排除假日。一月八日即使當地放假仍會符合。先分清工作日指週一至週五還是企業營業日。假日排除需要執行系統額外規則,可用營業日計算核對日期。
不包含恰好等於起點的候選
候選嚴格晚於起點。週五九點雖符合,但等於起點時排除。將起點退一秒至 2024-01-04T23:59:59Z,首筆變一月五日 00:00:00Z。區分含目前瞬間與下一次即可理解少一次的現象。
重現問題應同時提供式、時區和固定起點。現在起十次會因人因日變化。檢查月底或星期邊界時從邊界前開始,可用短清單定位。
以為是一號且週一,實際不是
0 9 1 * 1本工具中此式符合每月一號或週一九點。從 UTC 2024-05-31T00:00:00Z 開始,會出現六月一日週六、三日週一、十日週一,並非只有一號恰為週一。增加條件並不總是縮小 Cron 範圍。
星期 0、7 為週日,1 為週一。本工具不接受月份星期名稱、L/#/?、含秒六欄位及服務專用格式。遷移時勿機械刪除多出的欄位,先確認原規格中秒、年意義,再重新表達支援的計畫。
*/20 不是距上次二十分鐘
*/20 * * * *09:07 開始,下次為 09:20 而非 09:27。Cron 符合欄位,不是從上次完成後等待。工作耗時二十五分鐘也不自動推遲候選。互斥、重試和停機漏跑由執行系統決定。
日光節約時間的兩點要轉回當地時間看
America/New_York 的 0 2 * * * 從 2024-03-09T08:00:00Z 開始,本工具首筆是 2024-03-10T07:00:00Z,當地三點。剖析器如此處理不存在的兩點,次日為 06:00:00Z、當地兩點。不能斷言所有排程器都跳過缺失時刻。
秋季重複時刻執行一次還是兩次,應查目標排程器。本清單是函式庫產生候選,不保證伺服器或雲端平台執行。固定 UTC 會改變當地時刻,固定當地時刻會改變經過間隔,應按業務需要選擇。
登錄排程前留下核對紀錄
分別以普通週、月底和位移切換前為起點檢查。最多一百筆且搜尋五個曆年;上限錯誤不是成功的空排程,應重查式和期間。要求一百次年度工作超出範圍。
交接時記錄式、地區、起點、最初預期候選及假日、重疊規則。SheepDev 不登錄工作也不執行命令;先把疑問變具體案例,再與實際環境核對。
只看接下來十次,可能漏掉月底空缺
0 9 31 * * 指每月 31 日,不會在短月份自動補到月底。應查看跨二月、四月的候選。每月同日、月底、上次後三十天是不同計畫,支援的五欄位語法不能表達時,不能用看起來相近的式子當完成。
每分鐘候選正確,也不表示工作超過一分鐘時如何重疊。等待、跳過、平行是執行平台策略,不是式子屬性。候選時間驗證與互斥、重試設計應分開,Cron 正確不證明已完成或失敗後可安全重做。
保留一般週、跨月、跨年及相關日光節約時間邊界的固定起點範例。只從現在測試,每天證據不同。固定起點和時區可做回歸檢查。有界搜尋找不到候選,只能說明所查範圍,不能斷言未來永不執行。