crontab 星期几与每月的某一天?

ane*_*ane 16 cron syntax crontab

我在几个不同的 linux 和 freebsd 系统上将它添加到 /etc/crontab 中:

# monthly reboot: 3rd Tuesday of every month
56 07 15-21 * 2 root /sbin/shutdown -r now
Run Code Online (Sandbox Code Playgroud)

我想在每个月的第三个星期二重新启动。然而,所有系统都在本月的第三个星期三(19日)重新启动。

我究竟做错了什么?

更新:感谢 Ranon 在下面的回答,看起来下面的修订版会起作用,任何人都可以确认或者有更好的方法吗?

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

Jen*_*rat 17

看看man 5 crontab

注意:命令执行的日期可以由两个字段指定 - 月中的某天和一周中的某天。如果两个字段都受到限制(即不是 *),则当任一字段与当前时间匹配时,将运行该命令。例如,“30 4 1,15 * 5”将使命令在每个月的 1 号和 15 号以及每个星期五的凌晨 4:30 运行。但是,可以通过向命令添加测试来获得所需的结果(请参阅下面示例 CRON 文件中的最后一个示例)。

所以你的服务器应该每天从 15-21 和每个星期二重新启动。

看看联机帮助页的示例:

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

  • 这看起来像是一个设计错误。如果我想每天 15-21 点和每个星期二,我会做两个单独的 crontab 条目。不得不求助于单独的测试是一个丑陋的黑客。也就是说,感谢您提供解决方法! (8认同)