参考:适用于 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 表达式支持的值 字段 值 通配符 分钟 0
-59
, - * /
小时 0
-23
, - * /
日期 1
-31
, - * ? / L W
月(仅限维护时段) 1
-12
或JAN
-DEC
, - * /
星期几 1
-7
或SUN
-SAT
, - * ? / L #
年 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 “日期”字段中的 W
通配符用于指定工作日。在“日期”字段中,3W 用于指定最靠近当月的第三周的日。# Day-of-week(星期几)字段中的 #
通配符后接一个介于一到五之间的数值,用于指定该月的特定日期。例如,5#3 表示该月第三个星期四(以星期日作为一星期中的第一天计算)。 - Rate 表达式
-
Rate 表达式有以下两个必需字段。这些字段采用空格分隔。
Rate 表达式的必需字段 字段 值 值
正数,如
1
或15
单位
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(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 表达式