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

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

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

当您创建一个Amazon Web Services Systems Manager维护时段或状态管理器关联时,您指定一个有关该时段或关联应何时运行的计划。您能够以基于时间的条目(称为 cron 表达式)或基于频率的条目(称为 rate 表达式)的形式指定计划。

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

cron(30 23 ? * TUE#3 *)

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

注意

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

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

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

维护时段示例

要创建维护窗口,请使用AmazonCLI 中,您可以包含--schedule参数与 cron 或 rate 表达式或者时间戳。下列示例使用AmazonCLI 在本地 Linux 计算机上。

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

关联示例

要使用AmazonCLI 中,您可以包含--schedule-expression参数与 cron 或 rate 表达式相同。下列示例使用AmazonCLI 在本地 Linux 计算机上。

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) 运行
0/15 * * * ? * 每 15 分钟运行一次
0/10 * ? * MON-FRI * 从星期一到星期五,每 10 分钟运行一次
0/5 8-17 ? * MON-FRI * 在每星期一到星期五的上午 8:00 到下午 5:55 (UTC) 之间,每 5 分钟运行一次

支持的值

下表列出了必需的 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 表达式中的 “日期” 和 “星期几” 字段中指定值。如果您在其中一个字段中指定了值,请使用? (问号)。

Wildcards

下表列出了 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) 分钟的 cron 表达式。对指定星期几值和日期值的 Support 不完整。必须使用问号 (?) 字符在其中一个字段中。

有关 cron 表达式的更多信息,请参阅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 表达式

本节包括适用于状态管理器关联的 cron 和 rate 表达式的示例。在创建这些表达式之前,请注意以下限制:

  • 关联支持以下 cron 表达式:每 1/2、1、2、4、8 或 12 个小时;每天或每周的特定时间。

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

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

注意

对于收集 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

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

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

rate(30 minutes)

每 30 分钟

rate(1 hour)

每小时

rate(5 hours)

每 5 小时

rate(15 days)

每 15 天

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

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

与状态管理器关联不同,维护时段支持所有 cron 和 rate 表达式。这包括支持秒数字段中的值。(注意:秒数字段中不支持零 (0)。)

例如,下面的 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 天