【问题标题】:Schedule Cron to skip first Saturday of every month安排 Cron 跳过每个月的第一个星期六
【发布时间】:2017-12-18 22:03:20
【问题描述】:

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

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

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

【问题讨论】:

    标签: linux bash shell cron


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      因为 Cron 中似乎没有选项。 我将使用脚本来满足上述需求。

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

      [ $(date +%d) -le 7 ] - 检查天数是否在每月的前 7 天

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

      谢谢。

      【讨论】:

        【解决方案3】:

        以下在 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 执行。命令中的“%”字符,除非用反斜杠 (\) 转义,否则将更改为换行符,第一个 % 之后的所有数据都将作为标准输入发送到命令。

        【讨论】:

        • 22 07 * * * [ date '+%u' -ne '2' && date '+%d' -lt 17 ] || [date '+%d' -gt 17] && //script.sh。编辑上述命令以立即触发脚本和测试。但它不起作用。我做错了什么吗?如果我没记错,它必须运行脚本。
        • 抛出以下错误。 /bin/sh: -c: line 0: 寻找匹配的''时出现意外的EOF
        • 你需要转义 % (出于某种原因我需要双 [[ ]] :[[ `date '+\%u'` -ne '2' && `date '+\%d'` -lt 17 ]] || [[ `date '+\%d'` -gt 17 ]] && echo foo > ~/foo.txt 2> ~/foo.err
        • 是的,这行得通。只是你的逻辑线 2 中的一个小修正,它的 8+ 而不是 8- :)
        • 您好,我正在尝试做同样的事情,除了每个月的第一个星期五,我的工作应该在所有星期五运行。 0 17 * * 5 [[ ! ( `date '+\%u'` -eq '5' && `date '+\%d'` -lt '8' ) ]] && /usr/bin/python3 test.py这对我不起作用,无法弄清楚我做错了什么,你能帮忙吗?通过 'escape the %',您是否要求删除 % ?
        猜你喜欢
        • 1970-01-01
        • 2014-10-22
        • 1970-01-01
        • 1970-01-01
        • 2018-10-18
        • 2011-03-15
        • 1970-01-01
        相关资源
        最近更新 更多