Linux

使用 cron 和腳本,我怎樣才能觸發某些事情,例如,在每個月的最後一個星期二前 11 天的上午 10 點?

  • September 16, 2013

我想安排一個任務在特定月份的一周中的指定日期之前的幾秒、幾分鐘、幾小時、幾天或幾週內執行。例子是:

  • 每月最後一個星期二前 7 天上午 8 點
  • 每月第 2 個星期六前 11 天上午 10 點
  • 每月最後一個星期五前 3 天下午 6 點

我很樂意將 cron/at 設置為在指定日期執行作業,並意識到如果我想在這些類型的時間表上執行,我可能必須與 cron 一起執行腳本。

有沒有人有我如何去做這件事的例子?

對於您的第一個範例,每月最後一個星期二前 7 天早上 8 點,我會這樣做:

0 8 * * 2 [[ $(date +%m) -eq $(date -d +7days +%m) ]] && [[ $(date +%m) -ne $(date -d +14days +%m) ]] && myscript

這樣做是在每週二早上 8 點執行0 8 * * 2(從現在開始本月不同”(即,這是該月的倒數第二個星期二),然後執行.myscript

從技術上講,這可能更有效——例如,您知道本月的倒數第二個星期二不能是本月的第一日——但這只會讓人更難理解。:) 此外,根據確切執行的 shell cron 等等,可能需要一些引用(+%m可能需要是"+%m"),或者您可能需要轉義百分號(即+%m可能需要是+\%m)。

將此技巧推廣到其他日子和高級組合作為練習留給讀者。

引用自:https://serverfault.com/questions/400478