我想安排一个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*-在本月的第五个星期一运行