我想在特定日期使用 crontab 运行命令,但前提是这一天不是星期日。我尝试过这个
1 0 27 12 1-6 命令.sh
但命令也在 12 月 26 日星期三运行。我怎样才能告诉 crontab 仅在 12 月 27 日运行命令?
谢谢 Max
答案1
我认为使用cron
alone 是不可能的,因为语法不允许“27日,周日除外”。它只允许“27日或非周日(或两者皆有)”。
我建议要么改为command.sh
在非周日立即退出,要么把支票放进计划任务:
1 0 27 12 * test $(date +\%u) -ne 7 && command.sh
在 shell 中,date +%u
返回星期几(1…7,1 表示星期一)。在 cronjob 中,我们必须转义该%
符号 ( \%
)。该命令将检查当前日期是否为非星期日,然后才执行
command.sh
。
cronjob 将会在每年 12 月 27 日 00:01 运行,无论是星期几,但只有在非星期日才会
command.sh
执行,因为之前的测试只在星期日成功。
注意:我有时会使用https://crontab.guru检查我的 cronjob 时间表。这很方便。
你的定义翻译为“27 日 00:01和从 12 月的周一到周六,每周的每一天。”所以这与你想要的完全相反。
来自手册页:
注意:命令执行的日期可以通过两个字段指定 - 月份日期和星期几。如果两个字段都受到限制(即不是 *),则命令将在以下情况下运行任何一个字段与当前时间匹配。例如,
30 4 1,15 * 5
将导致命令在每个月 1 日和 15 日的凌晨 4:30 运行,加每个星期五。但是,可以通过向命令添加测试来实现所需的结果(请参阅下面的示例 CRON 文件中的最后一个示例)。…
# Run on every second Saturday of the month 0 4 8-14 * * test $(date +\%u) -eq 6 && echo "2nd Saturday"