6

我想安排一个 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 事件不接受这些类型的参数。

4

2 回答 2

5

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

您可以非常基本地执行此操作,但需要 2 个单独的事件才能执行它:

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

不幸的是,对于计划表达式没有兼容的语法允许每隔一周的概念,因此上述命令有时可能会导致 3 周的间隔。

如果您不关心星期一,您当然可以0 14 1,15 * *在每个月的 1 号和 15 号(大约每 2 周)运行一次。

最后的选择是每周一运行,但如果不是每隔一周就退出脚本,那么表达式将只是0 14 ? * 2 *.

有关语法的更多信息,请参阅计划事件页面的Cron 表达式部分。

于 2020-07-23T16:53:26.237 回答
4

克里斯的回答是正确的。目前,我无法将其表达为 CloudWatch 计划事件的一部分。

但是,一种解决方法可能是将其设置为每周一 ( 0 14 ? * 2 *) 并触发一个 Lambda 函数,该函数在触发实际目标之前检查它是在一周内还是非一周内。

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

于 2020-07-23T17:02:21.897 回答