crontab 星期几与每月哪一天?

crontab 星期几与每月哪一天?

我将其添加到几个不同的 Linux 和 Freebsd 系统上的 /etc/crontab 中:

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

我希望每个月的第三个星期二重新启动。但是,所有系统都在本月的第三个星期三(19 日)重新启动。

我究竟做错了什么?

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

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

答案1

看一下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"

相关内容