排程管理
所有帶 Cron 觸發的任務集中在一張表:運算式、下次觸發、上次觸發,以及一個開關。
排程器每分鐘跑一次,而且只在一個節點上跑——多節點部署時是當下持有排程租約的那個,所以一條 Cron 是整個叢集觸發一次,不是每個節點各觸發一次。
每一輪它會比對到期的運算式、回報本機執行器心跳、把沒消息的執行器標記為離線,並清理超過保留期限的建置。所以 * * * * * 就是每分鐘觸發;比這更細的頻率無法表達。
時間表
表格上方有一張時間表:橫軸是時間,一個排程任務一列——也就是觸發方式是排程的任務。手動與推送的任務沒有排程可畫。
- 在「現在」之前——實際跑過的建置,畫在真正的開始時間與長度上。點下去看那一筆的日誌。
- 在「現在」之後——Cron 推算出來的下次觸發時刻,長度用該任務近期的平均耗時估。
- 過去那些淡的——排程該跑、卻沒有建置紀錄的時段。這格其實最有用:任務被暫停、或某個節點當時掛了,不必翻稽核紀錄就看得出來。
已暫停的任務仍留在時間表上,畫成灰的並標示出來——看得到「有一個排程存在但沒在跑」,比整列消失有用得多。Cron 運算式看不懂的話,那一列會標紅,而不是默默畫不出東西。
範圍可選 1、3、7 天;刻度(15 分鐘到 1 天)決定一欄有多寬。時間窗由伺服器決定,從系統時區的 00:00 起算,所以每個人看到的格線是同一套。
讀 Cron 運算式告訴你「應該」會發生什麼,時間表告訴你實際發生了什麼。
運算式
五個欄位——分、時、日、月、週——依系統設定 → 一般設定的時區求值,不是 UTC,也不是瀏覽器的時區。
| 運算式 | 觸發時機 |
|---|---|
*/15 * * * * | 每 15 分鐘 |
30 2 * * * | 每日凌晨 2:30 |
0 18 * * 5 | 每週五 18:00 |
0 0 1 * * | 每月 1 號 00:00 |
未來 24 小時把實際會觸發的時間展開列出。這是週末離開前確認運算式真的照你想的跑最快的方法。
與其他觸發方式的關係
排程只是三種觸發之一,不排斥其他兩種——一個任務可以每晚排程,同時也能手動執行或被推送觸發。暫停任務會一併停掉排程;那一列仍留在表上,開關是關的。
指定給離線執行器的排程建置仍然會被建立,它會在佇列裡等到執行器回來,不會被丟掉。