
我需要做一個 cron 作業在 UNIX 伺服器上每 40 分鐘執行一個 java 程式。考慮到:1)週一至週五的運行時間為8點30分至12點30分以及14點至18點2)考慮到假日。
我讀了很多相關內容,發現 */30 8..13,14..19 * * 1..5 作為最接近的解決方案。我想知道 crontab 是否可以做我想做的事情,如果不能,是否可以糾正 java 或任何程式碼來驗證假期日期。感謝您的協助
答案1
CRON 並不是那麼聰明,你要么需要有很多類似的規則,要么編寫一些更定制的東西來為你做這件事(但要小心,你不想編寫一個運行用戶提供的東西的腳本,如root 而不需要特別小心,你不想寫一個完成這個句號的腳本)
答案2
就像詹姆斯說的那樣,cron 並不是真的那麼聰明:它擅長“在這些時間做這些事情,一遍又一遍,直到我告訴你停止”,但它不會遵循浮動假期或對“時髦”感到興奮像這樣的計時every 40 minutes
(它需要一堆 crontab 條目來做類似的事情 - 你幾乎需要為每次運行創建一個)。
您可能最好使用 cron “盡可能接近實際”(即上面的規則,即在第 1 部分的限制內“在 HH:30 標記上每半小時運行一次”),然後讓您的腳本檢查自己處理例外情況(假期)並決定是否應該/不應該繼續。
答案3
對於您想要的東西來說,這可能有點過分了,但您可以使用 Hudson 來運行作業。就其本身而言,您不會立即獲得使用計時規則來執行作業的能力,但您可以透過多種方法遠端觸發作業。因此,如果您可以編寫腳本來更改網頁內容或建立新檔案或對 Hudson 進行 REST 呼叫或在需要執行作業時執行 git checkin,那麼您很幸運。您還可以獲得比單獨使用 cron 更好的日誌記錄,並且每當作業失敗時很容易收到警報(透過電子郵件、jabber、irc、nabaztag...)
從另一個角度來看這個問題。您真的需要它在指定的規則內運作嗎?如果改為每半小時運行一次會發生什麼事?如果您在不希望的時候運行它會發生什麼?