在特定日期运行 crontab,但仅限于特定的工作日

在特定日期运行 crontab,但仅限于特定的工作日

我想在特定日期使用 crontab 运行命令,但前提是这一天不是星期日。我尝试过这个

1 0 27 12 1-6 命令.sh

但命令也在 12 月 26 日星期三运行。我怎样才能告诉 crontab 仅在 12 月 27 日运行命令?

谢谢 Max

答案1

我认为使用cronalone 是不可能的,因为语法不允许“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"

相关内容