

• AWS Systems Manager CloudWatch 控制面板在 2026 年 4 月 30 日之后将不再可用。客户可以像现在一样继续使用 Amazon CloudWatch 控制台来查看、创建和管理其 Amazon CloudWatch 控制面板。有关更多信息，请参阅 [Amazon CloudWatch 控制面板文档](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)。

# 参考：适用于 Systems Manager 的 Cron 和 Rate 表达式
<a name="reference-cron-and-rate-expressions"></a>

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

## 有关 Cron 和 Rate 表达式的一般信息
<a name="reference-cron-and-rate-expressions-intro"></a>

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

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

**计划偏移天数**  
关联和维护时段仅支持 cron 表达式的*计划偏移天数*。计划偏移是在运行关联或维护时段之前但在 cron 表达式指定的日期和时间之后等待的天数。  
在以下命令中，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
```
在以下命令中，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 表达式示例**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/systems-manager/latest/userguide/reference-cron-and-rate-expressions.html)
仅限维护时段支持星期几范围（例如 `MON-FRI`）和逗号分隔的日期列表（例如 `MON,TUE,WED`）。对于关联，您必须指定一天（例如 `MON`）或使用 `*` 表示每一天。

**支持的值**  
下表列出了必需的 cron 条目支持的值。    
**Cron 表达式支持的值**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/systems-manager/latest/userguide/reference-cron-and-rate-expressions.html)
您不能在同一 cron 表达式中的 day-of-month（日期）和 day-of-week（星期几）字段中指定值。如果您在其中一个字段中指定了值，则必须在另一个字段中使用 ?（问号）。

**Cron 表达式的通配符**  
下表列出了 cron 表达式支持的通配符值。  
不支持产生的速率快于五 (5) 分钟的 cron 表达式。对同时指定星期几值和日期值的支持不完整。在其中一个字段中使用问号 (?) 字符。  
**Cron 表达式支持的通配符**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/systems-manager/latest/userguide/reference-cron-and-rate-expressions.html)

**Rate 表达式**  
Rate 表达式有以下两个必需字段。这些字段采用空格分隔。    
**Rate 表达式的必需字段**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/systems-manager/latest/userguide/reference-cron-and-rate-expressions.html)
如果值等于 `1`，则单位必须为单数。同样，对于大于 `1` 的值，单位必须为复数。例如，`rate(1 hours)` 和 `rate(5 hour)` 无效，而 `rate(1 hour)` 和 `rate(5 hours)` 有效。

**Topics**
+ [有关 Cron 和 Rate 表达式的一般信息](#reference-cron-and-rate-expressions-intro)
+ [适用于关联的 Cron 和 Rate 表达式](#reference-cron-and-rate-expressions-association)
+ [适用于维护时段的 Cron 和 Rate 表达式](#reference-cron-and-rate-expressions-maintenance-window)

## 适用于关联的 Cron 和 Rate 表达式
<a name="reference-cron-and-rate-expressions-association"></a>

此部分包括适用于 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 表达式，其中包括一周中的某一天，数字符号 (\$1) 用于指定一个月的第 *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 示例**  

| 示例 | Details | 
| --- | --- | 
|  cron(0/30 \$1 \$1 \$1 ? \$1)  |  每 30 分钟  | 
|  cron(0 0/1 \$1 \$1 ? \$1)  |  每小时  | 
|  cron(0 0/2 \$1 \$1 ? \$1)  |  每 2 小时  | 
|  cron(0 0/4 \$1 \$1 ? \$1)  |  每 4 小时  | 
|  cron(0 0/8 \$1 \$1 ? \$1)  |  每 8 小时  | 
|  cron(0 0/12 \$1 \$1 ? \$1)  |  每 12 小时  | 
|  cron(15 13 ? \$1 \$1 \$1)  |  每天下午 1:15  | 
|  cron(15 13 ? \$1 MON \$1)  |  每星期一下午 1:15  | 
|  cron(30 23 ? \$1 TUE\$13 \$1)  |  每月第三个星期二晚上 11:30  | 

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


**适用于关联的 Rate 示例**  

| 示例 | Details | 
| --- | --- | 
|  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 表达式
<a name="reference-cron-and-rate-expressions-maintenance-window"></a>

本节包括适用于维护时段的 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 示例**  

| 示例 | Details | 
| --- | --- | 
|  cron(0 2 ? \$1 THU\$13 \$1)  |  每月第三个星期四凌晨 2:00  | 
|  cron(15 10 ? \$1 \$1 \$1)  |  每天上午 10:15  | 
|  cron(15 10 ? \$1 MON-FRI \$1)  |  星期一到星期五每天上午 10:15  | 
|  cron(0 2 L \$1 ? \$1)  |  每月最后一天凌晨 2:00  | 
|  cron(15 10 ? \$1 6L \$1)  |  每月最后一个星期五上午 10:15  | 

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


**维护时段的 Rate 示例**  

| 示例 | Details | 
| --- | --- | 
|  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 表达式](https://en.wikipedia.org/wiki/Cron#CRON_expression)