AWS cron表达式每隔一个星期一运行一次



我想安排一个CloudWatch事件每隔一个星期一运行一次,并从以下命令开始:

0 14 ? * 2 *

目前有了上述命令,我每周都会得到周一执行的时间表:

Mon, 27 Jul 2020 14:00:00 GMT
Mon, 03 Aug 2020 14:00:00 GMT
Mon, 10 Aug 2020 14:00:00 GMT
Mon, 17 Aug 2020 14:00:00 GMT
Mon, 24 Aug 2020 14:00:00 GMT
Mon, 31 Aug 2020 14:00:00 GMT
Mon, 07 Sep 2020 14:00:00 GMT
Mon, 14 Sep 2020 14:00:00 GMT
Mon, 21 Sep 2020 14:00:00 GMT
Mon, 28 Sep 2020 14:00:00 GMT

然而,我希望将时间表设置为每隔一个星期一,例如

Mon, 27 Jul 2020 14:00:00 GMT
Mon, 10 Aug 2020 14:00:00 GMT
Mon, 24 Aug 2020 14:00:00 GMT
Mon, 07 Sep 2020 14:00:00 GMT
Mon, 21 Sep 2020 14:00:00 GMT

我看到了使用exp#的示例,但我认为AWS CloudWatch事件不接受这类参数。

Chris的回答是正确的。目前,我想不出将其作为CloudWatch Scheduled Events的一部分来表达。

然而,一个变通方法可以是将其设置为每周一(0 14 ? * 2 *(,并触发Lambda函数,该函数在触发实际目标之前检查它是在工作周还是休息周。

尽管这增加了一些复杂性,但这将是一个可行的解决方案。

您将无法执行任何更高级的命令(尤其是那些使用命令行变量的命令(。

你可以非常基本地做到这一点,但需要两个单独的事件才能实现:

  • 0 14 ? * 2#1 *-在每月的第一个星期一运行
  • 0 14 ? * 2#3 *-在本月的第三个星期一运行

不幸的是,调度表达式没有兼容的语法允许每隔一周使用一次,因此上述命令偶尔会导致间隔3周。

如果你不在乎星期一,你当然可以在每个月的1日和15日(大约每两周(使用0 14 1,15 * *跑步。

最后一个选项是每周一运行一次,但如果不是每隔一周运行一次脚本,则表达式将仅为0 14 ? * 2 *

有关语法的更多信息,请参阅Scheduled Events页面的Cron Expressions部分。

添加到@Chris的要点中的答案,

可以添加额外的规则来适应有5个星期一的月份

  • 0 14?*2#5*-在本月的第五个星期一运行