![關於不在假日(三天週末的星期一)運行 cron 作業的 Cron 提示](https://rvso.com/image/1263747/%E9%97%9C%E6%96%BC%E4%B8%8D%E5%9C%A8%E5%81%87%E6%97%A5%EF%BC%88%E4%B8%89%E5%A4%A9%E9%80%B1%E6%9C%AB%E7%9A%84%E6%98%9F%E6%9C%9F%E4%B8%80%EF%BC%89%E9%81%8B%E8%A1%8C%20cron%20%E4%BD%9C%E6%A5%AD%E7%9A%84%20Cron%20%E6%8F%90%E7%A4%BA.png)
我們設定了大約一百台機器,每台機器都執行 cron 作業,例如啟動和停止服務以及在一天結束時將這些服務的日誌檔案存檔到集中儲存庫。
我們最頭痛的一個問題是三天的週末(假日休息)。我們不希望服務在那些日子啟動並連接到我們業務合作夥伴的機器。
目前,我們透過手動註解掉最關鍵的工作並讓一堆錯誤整天發生來做到這一點。不理想。
基本上,如果工作在日期欄位中設定了“1-5”,我們希望這意味著“工作日”而不是“週一至週五”。我們有一個資料庫可以追蹤哪些日子確實是“工作日”
那麼,是否可以覆蓋 Cron 的日期匹配演算法,或者是否有其他方法可以輕鬆設定 cron 設定以避免週一假期啟動?
謝謝!
答案1
Cron 不支持這種決定。它很快就會變得非常複雜。在加拿大,各省之間的假期甚至不一致。
我會編寫一個運行程式腳本來檢查假期資料庫並在是假期時退出。嘗試類似的方法:
#!/bin/bash 今天=$(日期+%Y%m%d) 如果 grep -q $TODAY /etc/holidays;然後 echo 跳過假期 $* 出口0 菲 $*
答案2
我可以想像幾種方法來做到這一點,但最實用的解決方案將取決於所有 cron 作業的確切設定。例如:
如果可以透過腳本查詢工作日資料庫,則可以在星期日執行 cron 作業,確定第二天(週一)是否是工作日,並在某處設定/清除檔案。所有 cron 作業都可以查找該檔案是否存在,並相應地選擇執行或退出。
或者
您可以將所有單獨的 cron 條目替換為一個主作業,該主作業僅在(可檢查的)資料庫表明這是工作日時才觸發所有其他作業。