題 crontab星期幾與月份的某一天?


我在幾個不同的linux和freebsd系統上將它添加到/ etc / crontab:

# monthly reboot: 3rd Tuesday of every month
56 07 15-21 * 2 root /sbin/shutdown -r now

我想在每個月的第3個星期二重新啟動。但是,所有系統都在本月的第3個星期三(第19個)重新啟動。

我究竟做錯了什麼?

更新:感謝Ranon在下面的回答,看起來下面的版本會起作用,任何人都可以確認還是有更好的方法呢?

# monthly reboot: 3rd Tuesday of every month
56 07 15-21 * * root test $(date +\%u) -eq 2 && /sbin/shutdown -r now

13
2017-10-19 14:19


起源




答案:


看一下 man 5 crontab

注意:命令執行的日期可以由兩個指定   字段 - 月中的某天和星期幾。如果兩個字段都受限制   (即,不是*),當任一字段匹配時,將運行該命令   現在的時間。例如,``30 4 1,15 * 5''會導致a   命令將在每個月的1號和15號凌晨4:30運行   每週五。然而,可以通過添加a來實現期望的結果   測試命令(參見示例CRON文件中的最後一個示例   下面)。

因此,您的服務器應該每天從15-21和每週二重新啟動。

看看聯機幫助頁的示例:

# Run on every second Saturday of the month
0 4 8-14 * *    test $(date +%u) -eq 6 && echo "2nd Saturday"

13
2017-10-19 15:25



這看起來像是一個設計錯誤。如果我想每天從15-21和每週二開始,我會做兩個單獨的crontab條目。不得不採取單獨的測試是一個醜陋的黑客。也就是說,謝謝你提供一個解決方法! - Laurence Gonsalves