参考:适用于 Systems Manager 的 Cron 和 Rate 表达式
在 AWS Systems Manager 中创建 State Manager 关联或维护时段时,您需要指定一个说明该时段或关联应在何时运行的计划。您能够以基于时间的条目(称为 cron 表达式)或基于频率的条目(称为 rate 表达式)的形式指定计划。
有关 Cron 和 Rate 表达式的一般信息
以下信息适用于维护时段和关联的 cron 和 rate 表达式。
- 单次运行计划
- 
                    当您创建关联或维护时段时,可以按协调世界时 (UTC) 格式指定时间戳,使其在指定的时间运行一次。例如: "at(2020-07-07T15:55:00)"
- 计划偏移天数
- 
                    关联和维护时段仅支持 cron 表达式的计划偏移天数。计划偏移是在运行关联或维护时段之前但在 cron 表达式指定的日期和时间之后等待的天数。 如果您使用 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 表达式支持的值 字段 值 通配符 Minutes 0-59, - * /小时 0-23, - * /Day-of-month 1-31, - * ? / L W月(仅限维护时段) 1-12或JAN-DEC, - * /Day-of-week 1-7或SUN-SAT, - * ? / L #Year 1970-2199, - * /注意您不能在同一 cron 表达式中的 day-of-month(日期)和 day-of-week(星期几)字段中指定值。如果您在其中一个字段中指定了值,则必须在另一个字段中使用 ?(问号)。 
- Cron 表达式的通配符
- 
                    下表列出了 cron 表达式支持的通配符值。 注意不支持产生的速率快于五 (5) 分钟的 cron 表达式。对同时指定星期几值和日期值的支持不完整。在其中一个字段中使用问号 (?) 字符。 Cron 表达式支持的通配符 通配符 描述 , ,(逗号)通配符包含其他值。在“月份”字段中,JAN、FEB 和 MAR 将包含 January、February 和 March。- -(破折号)通配符用于指定范围。在“日”字段中,1-15 将包含指定月份的 1 - 15 日。* *(星号)通配符包含该字段中的所有值。在“小时”字段中,* 将包含每个小时。/ /(正斜杠)通配符用于指定增量。在“分钟”字段中,您可以输入 1/10 以指定从一个小时的第一分钟开始的每个第十分钟。因此,1/10 指定第 1、第 11、第 21 和第 31 分钟,依此类推。? ?(问号)通配符用于指定一个或另一个。在“日期”字段中,您可以输入 7,如果您不介意 7 日是星期几,则可以在“星期几”字段中输入“?”。L Day-of-month(日期)和 Day-of-week(星期几)字段字段中的 L通配符用于指定该月或该周最后一天。W “Day-of-month”字段中的 W通配符用于指定工作日。在“日期”字段中,3W 用于指定最靠近当月的第三周的日。# Day-of-week(星期几)字段中的 #通配符后接一个介于一到五之间的数值,用于指定该月的特定日期。例如,5#3 表示该月第三个星期四(以星期日作为一星期中的第一天计算)。
- Rate 表达式
- 
                    Rate 表达式有以下两个必需字段。这些字段采用空格分隔。 Rate 表达式的必需字段 字段 值 值 正数,如 1或15单位 minuteminuteshourhoursdaydays如果值等于 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(AWS 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(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(30 minutes) | 每 30 分钟 | 
| rate(1 hour) | 每小时 | 
| rate(5 hours) | 每 5 小时 | 
| rate(15 days) | 每 15 天 | 
适用于关联的 AWS CLI 示例
要使用 AWS CLI 创建State Manager关联,您可以使用 cron 或 rate 表达式包含 --schedule-expression 参数。以下是在本地 Linux 计算机上使用 AWS 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(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(30 minutes) | 每 30 分钟 | 
| rate(1 hour) | 每小时 | 
| rate(5 hours) | 每 5 小时 | 
| rate(25 days) | 每 25 天 | 
适用于维护时段的 AWS CLI 示例
要使用 AWS CLI 创建维护时段,您可以使用 cron 或 rate 表达式或者时间戳包含 --schedule 参数。以下是在本地 Linux 计算机上使用 AWS 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 表达式