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

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

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

当您创建关联或维护时段时,可以按协调世界时 (UTC) 格式指定时间戳,使其在指定的时间运行一次。关联维护时段还支持仅对 cron 表达式进行计划偏移。计划偏移是在运行关联或维护时段之前但在 cron 表达式指定的日期和时间之后等待的天数。例如,以下 cron 表达式计划了一个关联或维护时段,以便在每月的第三个星期二晚上 11:30 运行。

cron(30 23 ? * TUE#3 *)

如果计划偏移为 2,则维护时段将在两天后的晚上 11:30 才运行。

注意

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

在以编程方式或使用命令行工具(如 Amazon Command Line Interface (Amazon CLI))创建关联或维护时段时,应使用有效的 cron 或 rate 表达式(对于维护时段为时间戳)以正确格式指定计划参数。

使用 Amazon Systems Manager 控制台创建维护时段或关联时,可以使用有效的 cron 或 rate 表达式指定计划。也可以使用用户界面中的工具,这些工具简化了创建计划的过程。

维护时段示例

要使用 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-Cron-Offset-Maintenance-Window" \ --allow-unassociated-targets \ --schedule "cron(30 23 ? * TUE#3 *)" \ --duration 4 \ --cutoff 1 \ --schedule-offset 2
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

关联示例

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

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
注意

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

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

适用于 Systems 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 表达式不支持所有这些值。有关信息,请参阅 适用于关联的 Cron 和 Rate 表达式

Cron 表达式支持的值
字段 通配符
分钟 0-59 , - * /
小时 0-23 , - * /
日期 1-31 , - * ? / L W
月份 1-12 或 JAN-DEC , - * /
星期几 1-7 或 SUN-SAT , - * ? / L
年份 1970-2199 , - * /
注意

您无法在同一 cron 表达式中的“日期”和“星期几”字段中指定值。如果您在其中一个字段中指定了值,则必须在另一个字段中使用 ?(问号)。

通配符

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

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

不支持产生的速率快于五 (5) 分钟的 cron 表达式。对同时指定星期几值和日期值的支持不完整。在其中一个字段中使用问号 (?) 字符。

有关 cron 表达式的更多信息,请参阅 Wikipedia 网站上的 CRON 表达式

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 个小时;每天、每周、每月的第 n 天或最后一个 x 天的特定时间。

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

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

关联支持 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 周期应用关联)选项,或者必须从命令行指定使用 ApplyOnlyAtCronInterval 参数。此选项将告知 State Manager 不要在创建关联后立即运行关联。

注意

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

下表提供使用六个必需字段的关联的 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 天

适用于维护时段的 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 天