安排Cron跳过每个月的第一个星期六

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安排Cron跳过每个月的第一个星期六相关的知识,希望对你有一定的参考价值。

我需要一个cron跳过每个月的第一个星期六。我知道我们可以使用以下命令在特定日期运行,但有没有办法在每个月的特定日期跳过?

//在每个月的第一个星期一运行

 0 2 * * 1 [ date '+\%m' == date '+\%m' -d "1 week ago" ] || /path/to/command 
答案

您的命令是二进制文件还是脚本?如何在开头添加类似的东西:

[ $(date | awk '{print $1}') == "Sat" ] && exit 1 || { \
# your code here
...
}
另一答案

因为Cron似乎没有选择。我正在使用脚本来满足上述需求。

**if [ $(date +%d) -le 7 ] && [ $(date +%u) -eq 1 ] ;**

[ $(date +%d) -le 7 ] - 检查一天中的前7天是否有天数

[ $(date +%u) -eq 6 ] - 检查日期是否等于星期六

谢谢。

另一答案

以下在cron中工作(别忘了逃避%):

0 2 * * * [[ `date '+\%u'` -ne '6' && `date '+\%d'` -lt '8' ]] || [[ `date '+\%d'` -gt '7' ]] && /path/to/command

逻辑是:

  • 如果日期不是星期六,而月份的日期是1-7,请执行命令
  • 如果上述情况不正确,请检查当月的日期是否大于7,若是,则执行

另一种方法是反转逻辑:

0 2 * * * [[ ! ( `date '+\%u'` -eq '6' && `date '+\%d'` -lt '8' ) ]] && /path/to/command

逻辑是:

  • 如果该日不是第一个星期六,请执行该命令

man 5 crontab

“第六”字段(行的其余部分)指定要运行的命令。该行的整个命令部分,直到换行符或“%”字符,将由/ bin / sh或由cronfile的SHELL变量中指定的shell执行。除非使用反斜杠(\)进行转义,否则命令中的“%”字符将更改为换行符,并且第一个%之后的所有数据将作为标准输入发送到命令。

以上是关于安排Cron跳过每个月的第一个星期六的主要内容,如果未能解决你的问题,请参考以下文章

在詹金斯上安排两周一次的工作

有啥东西可以代表像“每个月的第一个星期一”这样的时期吗?

雪花 cron 任务错误? (不能在每个月的 x 天做)

每个星期六安排一个cron工作,间隔为21天

春天计划任务的cron表达式验证

如何找到每个月的第三周?第 1 周从每月的第一个星期一开始