我想在特定的一天使用 crontab 运行命令,但前提是这一天不是星期日。我试过这个
1 0 27 12 1-6 command.sh
但命令也在 12 月 26 日星期三运行。我怎么知道只有 12 月 27 日才执行 crontab 运行命令?
谢谢马克斯
我认为cron单独使用是不可能的,因为语法不允许"at 27 th except on Sundays"。它只允许“第27 天或非星期日(或两者)”。
我建议要么更改command.sh为在非周日立即退出,要么将该支票放入cronjob:
1 0 27 12 * test $(date +\%u) -ne 7 && command.sh
Run Code Online (Sandbox Code Playgroud)
在 shell 中,date +%u返回星期几(1…7,1 是星期一)。在 cronjob 中,我们必须避开那个%符号 ( \%)。该命令将检查当前日期是否为非星期日,然后才执行
command.sh。
cronjob 将在每个 12 月 27日的 00:01 点运行,无论那是一周中的哪一天,但只在非星期日
command.sh执行,因为之前的测试只对他们成功。
注意:我有时会使用https://crontab.guru来检查我的 cronjob 的时间表。这很方便。
您的定义可转换为“在 12 月的第 27 天的 00:01和每周一到周六的每一天。” 所以这与你想要的完全相反。
从联机帮助页:
注意:命令执行的日期可以由两个字段指定 - 月中的某天和一周中的某天。如果两个字段都受到限制(即不是 *),则当任一字段与当前时间匹配时,将运行该命令。例如,
30 4 1,15 * 5将导致命令在每个月的 1 号和 15 号以及每个星期五的凌晨 4:30 运行。但是,可以通过向命令添加测试来获得所需的结果(请参阅下面示例 CRON 文件中的最后一个示例)。…
Run Code Online (Sandbox Code Playgroud)# Run on every second Saturday of the month 0 4 8-14 * * test $(date +\%u) -eq 6 && echo "2nd Saturday"
| 归档时间: |
|
| 查看次数: |
4936 次 |
| 最近记录: |