【问题标题】:How to setup cron job to run every 5 days?如何设置 cron 作业每 5 天运行一次?
【发布时间】:2015-07-15 01:49:47
【问题描述】:

我想设置 cronjob,例如今天开始,它将每 5 天运行一次。 这就是我现在所拥有的,这会正常工作吗?如果我在 5 点安装此作业,然后每 5 天在早上 6 点安装。

0 6 */5 * * mailx -r root@mail.com -s "邮件标题" -c "cc@mail.com" primary@mail.com

【问题讨论】:

    标签: arrays cron


    【解决方案1】:

    Brad 的最后一个 sn-p 将不起作用,因为它忽略了实际日期。

    日期 +%s -d "2019-01-01"

    将始终返回相同的秒数,最终结果将始终为真或始终为假,具体取决于您选择的日期。

    您必须进行这样的额外计算才能从 2019 年 1 月 1 日 00:00:00 开始每 5 天 00:00 运行一次:

    0 0 * * * bash -c '(( ( $(date +\%s) - $(date +\%s -d "2019-01-01 00:00:00") ) / 86400 \% 5 == 0 )) && runmyjob.sh'
    

    【讨论】:

      【解决方案2】:

      请耐心等待,这是我第一次发布答案...如果我提出的任何内容不清楚,请告诉我。

      我不认为你有你需要的东西:

      0 0 */5 * * ## <<< WARNING!!! CAUSES UNEVEN INTERVALS AT END OF MONTH!!
      

      不幸的是,*/5 正在根据月份中的某天设置间隔。请参阅:explanation here。在月底,保证经常性问题。

      1st  at 2019-01-01 00:00:00
      then at 2019-01-06 00:00:00 << 5 days, etc. OK
      then at 2019-01-11 00:00:00
      ...
      then at 2019-01-26 00:00:00
      then at 2019-01-31 00:00:00
      then at 2019-02-01 00:00:00 << 1 day WRONG
      then at 2019-02-06 00:00:00
      ...
      then at 2019-02-26 00:00:00
      then at 2019-03-01 00:00:00 << 3 days WRONG
      

      根据this article,您需要在正在执行的命令中添加一些模数学,以“每 N 天”获得一个 TRUE。例如:

      0 0 * * *  bash -c '(( $(date +\%s) / 86400 \% 5 == 0 )) && runmyjob.sh
      

      在此示例中,作业将在每天上午 12:00 检查,但仅在自 01-01-1970 以 5 为模的天数为 0 时才执行。

      如果您希望从特定日期开始每 5 天发送一次,请使用以下格式:

      0 0 * * *  bash -c '(( $(date +\%s -d "2019-01-01") / 86400 \% 5 == 0 )) && runmyjob.sh
      

      【讨论】:

      • in "2019-01-01" 是第二个月还是最后一个月?
      【解决方案3】:
      0 0 */5 * *  midnight every 5 days.
      

      看到这个,类似的问题只是每 3 天问一次。 Cron job every three days

      【讨论】:

      • 所以它会在今天午夜发送,然后在午夜 11 点发送?
      猜你喜欢
      • 2022-10-25
      • 2011-03-20
      • 2014-08-14
      • 2013-11-27
      • 2018-10-17
      • 1970-01-01
      • 2023-03-04
      • 2011-05-31
      • 2015-07-29
      相关资源
      最近更新 更多