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

问题描述 投票:0回答:4

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

amazon-web-services cron amazon-cloudwatch-events
4个回答
7
投票

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

但是,解决方法可能是将其设置为每周一 (

0 14 ? * 2 *
) 并触发 Lambda 函数,在触发实际目标之前检查它是在工作日还是在休息周。

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


6
投票

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

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

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

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

如果你不关心星期一,你当然可以使用

0 14 1,15 * *
在每个月的1号和15号运行(大约每两周一次)。

最后的选择是每周一运行,但如果不是每隔一周运行一次,则让脚本退出,则表达式将是

0 14 ? * 2 *

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


0
投票

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

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

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

0
投票

您可以使用费率调度程序并设置开始日期来完成此操作。

在 AWS SAM 中,它看起来像这样:

  Events:
    CWSchedule:
      Type: ScheduleV2
      Properties:
        ScheduleExpression: "rate(14 days)"
        FlexibleTimeWindow:
          Mode: FLEXIBLE
          MaximumWindowInMinutes: 5
        StartDate: "2024-04-01T12:00:00.000Z"
        ScheduleExpressionTimezone: UTC

请参阅此处:https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-property-function-schedulev2.html

这里:https://docs.aws.amazon.com/scheduler/latest/APIReference/API_CreateSchedule.html#scheduler-CreateSchedule-request-StartDate

© www.soinside.com 2019 - 2024. All rights reserved.