Cron 计划每13天触发一次Azure管道

Cron 计划每13天触发一次Azure管道,cron,yaml,azure-pipelines,Cron,Yaml,Azure Pipelines,我想写一个计划触发器,每13天在Azure中触发一次管道。我似乎找不到正常的cron-jobs语法的答案,我已经看到可以将它与正则表达式结合起来。开始的日子并不重要。我想到了这样的事情: schedules: - cron: "0 1 * * * $((((($(date +%s) / 86400) % 13))==0))" displayName: Every 13 days execution 但是我得到了一个语法错误。如何将正则表达式添加到azure中的cron定时触发器 如果您回显正则

我想写一个计划触发器,每13天在Azure中触发一次管道。我似乎找不到正常的cron-jobs语法的答案,我已经看到可以将它与正则表达式结合起来。开始的日子并不重要。我想到了这样的事情:

schedules:
- cron: "0 1 * * * $((((($(date +%s) / 86400) % 13))==0))"
displayName: Every 13 days execution
但是我得到了一个语法错误。如何将正则表达式添加到azure中的cron定时触发器

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

显然,像:
0*/13**
这样的东西不起作用,因为它将在13日和26日,从一个月的26日到下一个月的13日,时间超过13天

编辑:
0*/312***
有效吗?据我所知,似乎是这样。我只是不确定它是否是24小时制的,因此从未真正运行过?因为,好吧,每312小时一次,一天中从来没有312小时,但如果不这样理解,应该没问题吧? 看到一个人写了类似的东西,得到了15票

第二次编辑:命令/312不起作用。频率不能高于23,这是有道理的。不要相信你在书堆上读到的一切:-)

时间表:
-cron:“0 1***$(($(日期+%s)/86400)%13))==0”)”
displayName:每13天执行一次

但是我得到了一个语法错误

造成此语法错误的原因应该是,在只需要5个条目的情况下包含6个条目,或者在
计划中缺少
分支
参数

/312不工作

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

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

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

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

  • 您不能将这样的正则表达式添加到yaml文件的cron部分,但是,我对此不确定。我只是想不出如何做到这一点,也没有在网上或Azure的文档中找到任何示例,他们在cron部分的yaml文件中使用regex
  • 如果你看一下我的编辑,我试着做
    cron 0*/312***
    ,根据,它说:“每312小时0分钟。”但是小时是24小时索引的,cron是无状态的(它不知道以前执行的时间,它运行的时间,如果失败或不失败等等),所以它永远不会到达312小时,因为时间是基于时钟的实际时间。它没有提供语法错误,而是每24小时执行一次。如果您想测试它,我建议您执行以下操作:
  • 将以下内容添加到行的末尾:

    */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个索引(当分钟时),我假设小时也是如此

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

  • 因此,在第一部分,我只是不认为可以在azure管道中的cron步骤中加入正则表达式。我还尝试了另外一个条目。如果有人知道你是否可以合并它,请让我知道。第二部分,是的,没有语法错误。但是,我在我的机器上进行了本地测试,如前所述,频率为23小时,然后重置。所以,如果我把/25、/30、/500放在任何地方,它只会把它看作最大值23,同时执行它。我想你是对的,“0*/312***”不会像预期的那样工作,我昨天创建的管道,今天早上用它作为它的cron计划构建。我错了,这个cron的东西需要实时测试,而不是智能感知,这使得很难判断它是否正确。很抱歉给你带来了困惑。
    */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