【问题标题】:Scheduled trigger every 13 days Azure pipeline每 13 天计划触发一次 Azure 管道
【发布时间】:2020-04-23 20:22:38
【问题描述】:

我想编写一个计划触发器,以每 13 天在 Azure 中触发一次管道。我似乎无法使用正常的 cron 作业语法找到答案,而且我已经看到您可以将它与正则表达式结合使用。开始日期很重要。我想过这样的事情:

schedules:
- cron: "0 1 * * * $((((($(date +%s) / 86400) % 13))==0))"
displayName: Every 13 days execution

但我收到语法错误。如何将正则表达式添加到天蓝色的 cron 计划触发器?

如果您回显正则表达式的结果:echo $((((($(date +%s) / 86400) % 13))==0)),您可以看到它按预期工作,现在它是关于在 yaml 文件中将其与 cron 作业一起使用。

显然,类似:0 0 */13 * * 不起作用,因为它将在 13 日和 26 日,从每月 26 日到下一个 13 日,超过 13 天。

编辑: 0 */312 * * * 会工作吗?根据https://crontab.guru/#0_/312___ 似乎是这样。我只是不确定它是否是 24 小时制的,因此从未真正运行过?因为,嗯,每312小时一次,一天从来没有312小时,但如果不这样解释应该没问题吧? 看到一个人在Cron job every three days 上写了类似的东西,得到了 15 个赞。

第二次编辑: /312 不起作用。频率不能高于 23,这是有道理的。不要相信您在 Stack 上阅读的所有内容 :-)

【问题讨论】:

    标签: cron yaml azure-pipelines


    【解决方案1】:

    如果我错了,请告诉我,但我得出以下结论:

    1. 您不能将这样的正则表达式添加到 yaml 文件的 cron 部分 - 但是,我不确定这一点。我只是不知道该怎么做,也没有在网上或 Azure 的文档中找到任何示例,他们在 cron 部分下的 yaml 文件中使用了正则表达式。
    2. 如果您查看我的编辑,我尝试执行cron 0 */312 * * *,根据https://crontab.guru/#0_/312___,它说:“在每 312 小时后的第 0 分钟。”但小时是 24 小时索引的,而 cron 是无状态(它对以前的执行、运行时间、它们是否失败等一无所知)所以它永远不会达到第 312 个小时,因为这些时间是基于时钟小时的实际时间。它不提供语法错误,而是每 24 小时执行一次。如果您想对其进行测试,我建议您执行以下操作:
    touch /home/user/Desktop/everyminute.log
    crontab -e
    

    将以下内容添加到行尾:

    */1 * * * * echo "tick $(/bin/date)" >> /home/user/Desktop/everyminute.log
    */61 * * * * echo "tack $(/bin/date)" >> /home/user/Desktop/everyminute.log
    */100 * * * * echo "tock $(/bin/date)" >> /home/user/Desktop/everyminute.log
    

    然后执行tail -f /home/user/Desktop/everyminute.log。 你会看到每分钟一个刻度,当一个小时过去了,你会同时看到一个刻度,大头钉和敲击声(一个小时后),这证实了它是 60 索引的事实(当分钟),我假设小时相同。

    1. 所以,我最终做了一个 hack。我在 yaml 文件中添加:cron 0 13 * * 0,该文件每周日运行,在我在管道中执行的实际 bash 脚本中,我在第 1 行添加了if [ $(($(date +%V) % 2)) -eq 0 ],以检查一周是偶数还是奇数。所以管道仍然每周执行一次(运行它几乎需要零资源),但它只执行作业,如果一周是偶数的话。顺便说一句,这也意味着它是每 14 天而不是每 13 天,但我也可以使用它。

    【讨论】:

      【解决方案2】:

      schedules: - cron: "0 1 * * * $((((($(date +%s) / 86400) % 13))==0))" displayName: Every 13 days execution

      但我收到语法错误。

      此语法错误应该是由于包含 6 个条目而只需要 5 个,或者您在 schedules 中缺少 branches 参数。

      /312 不起作用。

      我试过了,它工作正常,没有任何错误:

      schedules:
        - cron: "0 */312 * * *"
          displayName: Every 13 days execution
          branches:
            include:
              - master
          always: true
      

      “不起作用”是什么意思,您是否遇到任何错误消息?如果是,请分享您遇到的错误。

      【讨论】:

      • 所以,对于第一部分,我只是认为您不能将正则表达式放入 azure 管道中的 cron 步骤中。我还尝试了另外 1 个条目。如果有人知道你是否可以合并它,请告诉我。第二部分,是的,没有语法错误。但是,我在我的机器上进行了本地测试,如前所述,频率为 23 小时,然后将其重置。因此,如果我输入 /25、/30、/500 什么的,它只会将其视为最大 23 并同时执行。
      • 我认为你是对的,“0 */312 * * *”不会按预期工作,我昨天创建的管道将其作为今天早上的 cron 计划构建。我错了,这个 cron 东西需要实时测试,而不是智能感知,所以很难判断它是否不正确。很抱歉造成混乱。
      猜你喜欢
      • 2021-09-17
      • 1970-01-01
      • 2014-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-21
      • 2022-07-28
      • 1970-01-01
      相关资源
      最近更新 更多