crontab 僅排除特定日期

crontab 僅排除特定日期

我怎麼能寫一個排除特定日期的 cron?

假設:我需要在週末每 30 分鐘執行一次 crontab,從下午 6 點到晚上 9 點,只想排除 2014 年 5 月 10 日。

是否可以?我該怎麼寫這篇?或有什麼替代方案嗎?請建議。

答案1

標準 cron 語法非常簡單,它不支援排除。在某些情況下,可以建立幾個/多個 cron 條目的清單來實現此類邏輯,但這往往很乏味且難以理解或維護;不過,這種方法不適用於您的情況(尤其是因為標準 cron 沒有日曆年的概念)。

讓 cron 命令變得複雜並不是一個好計劃,但是您可以使用相對簡單的方法來做到這一點,例如:

0,30 18-20 * * sat,sun [ "$(date +\%Y\%m\%d)" = "20140510" ] || mycommand
0    21    * * sat,sun [ "$(date +\%Y\%m\%d)" = "20140510" ] || mycommand

(使用“ 0,30 18-21”,任務也將在 21:30 運行;如果您希望也在 21:00 運行,則需要第二行,如果不是,則忽略它)

注意:在一些crontab你必須轉義百分號(它們用於在將內聯資料填充到命令的標準輸入中時指示換行符),儘管不在 Dillon 的 cron 中。

cron 指令其實是一個 shell命令列表||控制算子提供短路評估命令。清單中的命令從左到右一次嘗試一個,但當第一個命令傳回 true 時停止執行。如果日期字串比較傳回 true(僅一天為 true)mycommand則不運行,當日期比較傳回 false 時mycommand運行。

但請注意,cron 啟動程序的方式有很多不同。最可靠的方法是使用包裝腳本來實現條件邏輯。

答案2

您可以用於X-Y時間間隔和*/Z頻率。在哪裡:

  • X是間隔的開始。
  • Y是間隔的結束。
  • Z只是一個除數(即:每個Z)。

為了排除某個日期,我只需建立自己的腳本。在此腳本中,檢查日期,然後決定是否要執行下列指令。

相關內容