【问题标题】:how to create a cron expression for every 2 weeks如何为每 2 周创建一个 cron 表达式
【发布时间】:2018-02-16 23:02:14
【问题描述】:

这是cron 表达式我试过0 0 0 */14 * ? 它给出了以下时间表

开始时间:-Friday, September 8, 2017 1:25 AM

下一个计划:-

1.  Friday, September 15, 2017 12:00 AM
2.  Friday, September 29, 2017 12:00 AM
3.  Sunday, October 1, 2017 12:00 AM
4.  Sunday, October 15, 2017 12:00 AM
5.  Sunday, October 29, 2017 12:00 AM

这个表达式每个月每两周运行一次,但我的要求是它必须每两周运行一次,我的意思是在执行 sept 29th 之后,nxt 调度应该是 October 13 但它正在调度 @987654327 @

【问题讨论】:

  • 我认为你应该保存运行脚本的最后日期,如果当前时间大于或等于 14 天,那么它应该运行,否则它应该运行 dieexit。跨度>
  • 如何做这些事情,你能提供一些技术信息吗?
  • 您需要创建一个文件或将日期存储在数据库中,然后读取该日期并使用以下函数将其与当前日期进行比较`public function date_differnece($d1, $d2) { $date1 = new DateTime($d1); $date2 = new DateTime($d2); return $date2->diff($date1)->format("%r%a"); }
  • 我们不能为每 2 周定义/创建一个直接的 Cron 表达式
  • 必须有一些复杂的条件方式,但不可能按照您的方式进行。我在这方面做得不是很好,所以我建议了我会做的事情。

标签: cron


【解决方案1】:

没有直接的 cron 每 2 周表达式,但我一直遵循 cron 表达式,这类似于 2 周,但不完全是 2 周

cron for every 2weeks(on 1st and 15th of every month at 1:30AM) - 30 1 1,15 * *

【讨论】:

    【解决方案2】:

    每两周的周五:

    0 0 * * Fri [ $(expr $(date +%W) \% 2) -eq 1 ] && /path/to/command
    

    发现于: https://cron.help/every-2-weeks-on-friday

    【讨论】:

    • 可以使用0 0 0 */14 * ?,但不能与特定的日期名称结合使用,因为未实现对指定星期几和月份参数的支持。跨度>
    • @parisssss,如果在星期五,它将在每月的 14 天运行一次。
    • 对我来说我必须修复它,也转义第一个 % 0 0 * * Fri [ $(expr $(date +\%W) \% 2) -eq 1 ] && /path/到/命令
    【解决方案3】:

    您需要指定开始日期。否则,它将始终在每月的第一天重置。 所以这个表达式“0 0 0 23/14 OCT ? 2017”从 2017 年 10 月 23 日开始每 2 周出现一次

    【讨论】:

    • 这实际上是“从 2017 年 10 月 23 日开始每 14 天”。因此,唯一的执行时间是 2017-09-23。
    【解决方案4】:
    30 7 1-7,14-21 * 1
    

    “每个月的 1 点到 7 点、每个月的 14 点到 21 点以及星期一的 07:30。”

    【讨论】:

    • 这大约每两周运行一次,但并不完美。例如,此表达式将在 2022-01-03、2022-01-17 上运行,但会跳过 2022-01-31。
    【解决方案5】:

    我的 Ubuntu 18 上的 crontab 手册说:

    注意:命令执行的日期可以由两个字段指定 - 月份的日期和星期几。如果两个字段都受到限制(即不是 *),则当任一字段与当前时间匹配时,将运行该命令。例如, ``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"
    

    【讨论】:

      猜你喜欢
      • 2021-09-09
      • 1970-01-01
      • 1970-01-01
      • 2012-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-09
      相关资源
      最近更新 更多