参考:适用于 Systems Manager 的 Cron 和 Rate 表达式 - Amazon Systems Manager
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

参考:适用于 Systems Manager 的 Cron 和 Rate 表达式

在 Amazon Systems Manager 中创建 State Manager 关联或维护时段时,您需要指定一个说明该时段或关联应在何时运行的计划。您能够以基于时间的条目(称为 cron 表达式)或基于频率的条目(称为 rate 表达式)的形式指定计划。

有关 Cron 和 Rate 表达式的一般信息

以下信息适用于维护时段和关联的 cron 和 rate 表达式。

单次运行计划

当您创建关联或维护时段时,可以按协调世界时 (UTC) 格式指定时间戳,使其在指定的时间运行一次。例如:"at(2020-07-07T15:55:00)"

计划偏移天数

关联和维护时段仅支持 cron 表达式的计划偏移天数。计划偏移是在运行关联或维护时段之前但在 cron 表达式指定的日期和时间之后等待的天数。

Maintenance window example

在以下命令中,cron 表达式将维护时段计划在每月第三个星期二的晚上 11:30 运行。但是,由于计划偏移为 2,因此维护时段将在两天后的晚上 11:30 才运行。

aws ssm create-maintenance-window \ --name "My-Cron-Offset-Maintenance-Window" \ --allow-unassociated-targets \ --schedule "cron(30 23 ? * TUE#3 *)" \ --duration 4 \ --cutoff 1 \ --schedule-offset 2
Association example

在以下命令中,cron 表达式将关联计划在每个月的第二个星期四运行。但是,由于计划偏移量为 3,因此该关联将在三天后的下周日才会运行。

aws ssm create-association \ --name "AWS-UpdateSSMAgent" \ --targets "Key=instanceids,Values=i-0cb2b964d3e14fd9f" \ --schedule-expression "cron(0 0 ? * THU#2 *)" \ --schedule-offset 3 --apply-only-at-cron-interval
注意

要将偏移与关联一起使用,必须指定 --apply-only-at-cron-interval 选项。此选项将告知系统不要在创建关联后立即运行该关联。

如果您使用 cron 表达式创建一个关联或维护时段,该维护时段指向当前期间中已经过去的一天,但添加了一个将来的计划偏移日期,则关联或维护时段将不会在此期间内运行。它将在下一个期间生效。例如,如果您指定了一个 cron 表达式(它应在昨天运行维护时段)并添加两天的计划偏移,则该维护时段明天不会运行。

必填字段

维护时段的 Cron 表达式有六个必填字段。关联的 Cron 表达式有五个必填字段。(State Manager 目前不支持在关联的 cron 表达式中指定月数。) 另一个字段 Seconds(cron 表达式中的第一个字段)是可选的。这些字段用空格分隔。

Cron 表达式示例
分钟 小时 日期 月份 星期几 含义
0 10 * * ? * 每天上午的 10:00 (UTC) 运行
15 12 * * ? * 每天下午 12:15 (UTC) 运行
0 18 ? * MON-FRI * 每星期一到星期五下午 6:00 (UTC) 运行
0 8 1 * ? * 每月第 1 天上午 8:00 (UTC) 运行
支持的值

下表列出了必需的 cron 条目支持的值。

Cron 表达式支持的值
字段 通配符
分钟 0-59 , - * /
小时 0-23 , - * /
D ay-of-month 1-31 , - * ? / L W
月(仅限维护时段) 1-12JAN-DEC , - * /
D ay-of-week 1-7SUN-SAT , - * ? / L #
1970-2199 , - * /
注意

您不能在同一 cron 表达式的 day-of-month 和 day-of-week字段中指定值。如果您在其中一个字段中指定了值,则必须在另一个字段中使用 ?(问号)。

Cron 表达式的通配符

下表列出了 cron 表达式支持的通配符值。

注意

不支持产生的速率快于五 (5) 分钟的 cron 表达式。对同时指定 a day-of-week 和 day-of-month值的 Support 尚未完善。在其中一个字段中使用问号 (?) 字符。

Cron 表达式支持的通配符
通配符 描述
, ,(逗号)通配符包含其他值。在“月份”字段中,JAN、FEB 和 MAR 将包含 January、February 和 March。
- -(破折号)通配符用于指定范围。在“日”字段中,1-15 将包含指定月份的 1 - 15 日。
* *(星号)通配符包含该字段中的所有值。在“小时”字段中,* 将包含每个小时。
/ /(正斜杠)通配符用于指定增量。在“分钟”字段中,您可以输入 1/10 以指定从一个小时的第一分钟开始的每个第十分钟。因此,1/10 指定第 1、第 11、第 21 和第 31 分钟,依此类推。
? ?(问号)通配符用于指定一个或另一个。在 D ay-of-month 字段中,你可以输入 7,如果你不在乎 7 号是一周中的哪一天,你可以输入? 在 D ay-of-week 字段中。
L D ay-of-month 或 D ay-of-week 字段中的L通配符指定一个月或一周的最后一天。
W D ay-of-month 字段中的W通配符指定工作日。在 D ay-of-month 字段中,3W 指定最接近该月第三个工作日的日期。
# day-of-week 字段中的#通配符后跟一个介于 1 到 5 之间的数字表示该月的某一天。5 #3 指定该月的第三个星期四。
Rate 表达式

Rate 表达式有以下两个必需字段。这些字段采用空格分隔。

Rate 表达式的必需字段
字段

正数,如 115

单位

minute

minutes

hour

hours

day

days

如果值等于 1,则单位必须为单数。同样,对于大于 1 的值,单位必须为复数。例如,rate(1 hours)rate(5 hour) 无效,而 rate(1 hour)rate(5 hours) 有效。

适用于关联的 Cron 和 Rate 表达式

此部分包括适用于 State Manager 关联的 cron 和 rate 表达式的示例。在您创建这些表达式之前,请注意以下信息:

  • 关联支持以下 cron 表达式:每 1/2、1、2、4、8 或 12 个小时;每天、每周、每周的特定日期和时间;某月中特定某周的特定日期,或某月最后 x 天的特定时间。

  • 关联支持以下 rate 表达式:30 分钟的时间间隔或大于和小于 31 天。

  • 如果指定可选的 Seconds 字段,其值可以为 0(零)。例如:cron(0 */30 * * * ? *)

  • 对于收集 Inventory(Amazon Systems Manager 的一项功能)元数据的关联,建议使用 rate 表达式。

  • State Manager 目前不支持在 cron 表达式中为关联指定月数。

关联支持 cron 表达式,其中包括一周中的某一天,数字符号 (#) 用于指定一个月的第 n 天来运行关联。以下是一个在每月的第三个星期二 23:30 UTC 运行 cron 计划的示例:

cron(30 23 ? * TUE#3 *)

以下是一个在每月的第二个星期四在 UTC 午夜运行的示例:

cron(0 0 ? * THU#2 *)

关联还支持 (L) 符号来表示一个月的最后一个 X 天。以下是一个在每月的最后一个星期二 UTC 午夜运行 cron 计划的示例:

cron(0 0 ? * 3L *)

要进一步控制关联运行的时间,例如,如果您想在星期二补丁后两天运行关联,可以指定偏移量。偏移量定义了在计划日期之后等待多少天再运行关联。例如,如果指定的 cron 计划为 cron(0 0 ? * THU#2 *),则可以在 Schedule offset(计划偏移量)字段中指定数字 3,以便在每月的第二个星期四之后的每个星期天运行关联。

要使用偏移量,必须在控制台中选择 Apply association only at the next specified Cron interval(仅在下一个指定的 Cron 周期应用关联)选项,或者必须从命令行指定使用 --apply-only-at-cron-interval 参数。此选项将告知 State Manager 不要在创建关联后立即运行关联。

下表提供了适用于关联的 cron 示例。

适用于关联的 Cron 示例
示例 详细信息

cron(0/30 * * * ? *)

每 30 分钟

cron(0 0/1 * * ? *)

每小时

cron(0 0/2 * * ? *)

每 2 小时

cron(0 0/4 * * ? *)

每 4 小时

cron(0 0/8 * * ? *)

每 8 小时

cron(0 0/12 * * ? *)

每 12 小时

cron(15 13 ? * * *)

每天下午 1:15

cron(15 13 ? * MON *)

每星期一下午 1:15

cron(30 23 ? * TUE#3 *)

每月第三个星期二晚上 11:30

以下是一些适用于关联的 rate 示例。

适用于关联的 Rate 示例
示例 详细信息

rate(30 minutes)

每 30 分钟

rate(1 hour)

每小时

rate(5 hours)

每 5 小时

rate(15 days)

每 15 天

适用于关联的 Amazon CLI 示例

要使用 Amazon CLI 创建State Manager关联,您可以使用 cron 或 rate 表达式包含 --schedule-expression 参数。以下是在本地 Linux 计算机上使用 Amazon CLI 的示例。

注意

默认情况下,创建新关联时,系统会在创建关联后立即运行它,然后根据您指定的计划运行它。指定 --apply-only-at-cron-interval,这样便不会在创建关联后立即运行它。Rate 表达式不支持此参数。

aws ssm create-association \ --association-name "My-Cron-Association" \ --schedule-expression "cron(0 2 ? * SUN *)" \ --targets Key=tag:ServerRole,Values=WebServer \ --name AWS-UpdateSSMAgent
aws ssm create-association \ --association-name "My-Rate-Association" \ --schedule-expression "rate(7 days)" \ --targets Key=tag:ServerRole,Values=WebServer \ --name AWS-UpdateSSMAgent
aws ssm create-association \ --association-name "My-Rate-Association" \ --schedule-expression "at(2020-07-07T15:55:00)" \ --targets Key=tag:ServerRole,Values=WebServer \ --name AWS-UpdateSSMAgent \ --apply-only-at-cron-interval

适用于维护时段的 Cron 和 Rate 表达式

本节包括适用于维护时段的 cron 和 rate 表达式的示例。

与 State Manager 关联不同,维护时段支持所有 cron 和 rate 表达式。这包括支持秒数字段中的值。

例如,下面的 6 字段 cron 表达式在每天上午 9:30 运行维护时段。

cron(30 09 ? * * *)

通过向 Seconds 字段添加一个值,下面的 7 字段 cron 表达式在每天上午 9:30:24 运行维护时段。

cron(24 30 09 ? * * *)

下表提供更多适用于维护时段的 6 字段 cron 示例。

维护时段的 Cron 示例
示例 详细信息

cron(0 2 ? * THU#3 *)

每月第三个星期四凌晨 2:00

cron(15 10 ? * * *)

每天上午 10:15

cron(15 10 ? * MON-FRI *)

星期一到星期五每天上午 10:15

cron(0 2 L * ? *)

每月最后一天凌晨 2:00

cron(15 10 ? * 6L *)

每月最后一个星期五上午 10:15

下表提供维护时段的 rate 示例。

维护时段的 Rate 示例
示例 详细信息

rate(30 minutes)

每 30 分钟

rate(1 hour)

每小时

rate(5 hours)

每 5 小时

rate(25 days)

每 25 天

适用于维护时段的 Amazon CLI 示例

要使用 Amazon CLI 创建维护时段,您可以使用 cron 或 rate 表达式或者时间戳包含 --schedule 参数。以下是在本地 Linux 计算机上使用 Amazon CLI 的示例。

aws ssm create-maintenance-window \ --name "My-Cron-Maintenance-Window" \ --allow-unassociated-targets \ --schedule "cron(0 16 ? * TUE *)" \ --schedule-timezone "America/Los_Angeles" \ --start-date 2021-01-01T00:00:00-08:00 \ --end-date 2021-06-30T00:00:00-08:00 \ --duration 4 \ --cutoff 1
aws ssm create-maintenance-window \ --name "My-Rate-Maintenance-Window" \ --allow-unassociated-targets \ --schedule "rate(7 days)" \ --duration 4 \ --schedule-timezone "America/Los_Angeles" \ --cutoff 1
aws ssm create-maintenance-window \ --name "My-TimeStamp-Maintenance-Window" \ --allow-unassociated-targets \ --schedule "at(2021-07-07T13:15:30)" \ --duration 4 \ --schedule-timezone "America/Los_Angeles" \ --cutoff 1
更多信息

维基百科网站中的 CRON 表达式