Cron

每個月最後一個星期六的 Cron 條目

  • May 6, 2022

我想把我的劇本安排在每個月的最後一個星期六。我想出了以下內容:

45 23 22-28 * *  test $(date +\%u) -eq 6 && echo "4th Saturday"  && sh  /folder/script.sh 

這是正確的還是我需要改變它?我現在無法測試它,因為它只會在上週六被呼叫。請指教。

我每個月的最後一個星期日都有以下內容,但我不能理解很多。第一部分給出 24 是星期天,在 -eq 之後給出 7 我不知道這是什麼意思:

00 17  * * 0 [ $(cal -s | tail -2 | awk '{print $1}') -eq $(date | awk '{print $3}') ] && /folder/script.sh

我可以修改以上內容以獲得上週六嗎?

在羅密歐的幫助下,我得到了以下答案:

00 17 * * 6 [ $(cal -s | tail -2 | awk '{print $7}') -eq $(date | awk '{print $3}') ] && /folder/script.sh

你的邏輯是行不通的。月的上週六可以是 29 或 30 或 31。因此,進行檢查的最佳方法是每週六執行一次,並在該月的最後 7 天簽入腳本:

45 23 * * 6  sh  /folder/script.sh 

並在你的腳本中添加(這裡假設 GNU 實現date)類似:

if [ "$(date -d "+7 day" +%m)" -eq "$(date +%m)" ]
then echo "This is not one of last 7 days in month.";exit
fi
<rest of your script>

關於您在 cron 中的行,您應該編輯它以像這樣開始:

00 17  * * 6

(6 表示週六,0 或 7 表示週日)

引用自:https://unix.stackexchange.com/questions/550835