上周六的 Cron 条目

use*_*666 3 cron date

我想在每个月的最后一个星期六安排我的脚本。我想出了以下内容:

45 23 22-28 * *  test $(date +\%u) -eq 6 && echo "4th Saturday"  && sh  /folder/script.sh 
Run Code Online (Sandbox Code Playgroud)

这是正确的还是我需要更改它?我现在无法测试它,因为它只会在上周六被调用。请指教。

我每个月的最后一个星期天都有以下内容,但我不太明白。第一部分给出了星期天的 24,在 -eq 之后给出了 7,我不知道它是什么意思:

00 17  * * 0 [ $(cal -s | tail -2 | awk '{print $1}') -eq $(date | awk '{print $3}') ] && /folder/script.sh
Run Code Online (Sandbox Code Playgroud)

我可以修改上述内容以获得上周六吗?

在罗密欧的帮助下,我得到了以下答案:

00 17 * * 6 [ $(cal -s | tail -2 | awk '{print $7}') -eq $(date | awk '{print $3}') ] && /folder/script.sh
Run Code Online (Sandbox Code Playgroud)

Rom*_*nov 11

你的逻辑行不通。月份的最后一个星期六可以是 29 或 30 或 31。因此,进行检查的最佳方法是在每个星期六运行它并检查脚本,如果这是在一个月的最后 7 天:

45 23 * * 6  sh  /folder/script.sh 
Run Code Online (Sandbox Code Playgroud)

并添加您的脚本(这里假设 GNU 实现date)类似于:

if [ "$(date -d "+7 day" +%m)" -eq "$(date +%m)" ]
then echo "This is not one of last 7 days in month.";exit
fi
<rest of your script>
Run Code Online (Sandbox Code Playgroud)

关于您在 cron 中的行,您应该编辑它以这样开始:

00 17  * * 6
Run Code Online (Sandbox Code Playgroud)

(6 表示星期六,0 或 7 表示星期日)

  • @ user3901666,在间隔 22-31 中,您可能有多个星期六。查看您今年 11 月的日历。而上周六则不同,因为您一个月可以有 5 个周六 (2认同)