

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

# 在 Amazon 中为计划规则（旧版）设置计划模式 EventBridge
<a name="eb-scheduled-rule-pattern"></a>

**注意**  
计划规则是的传统功能 EventBridge。  
EventBridge提供了一种更灵活、更强大的方式来大规模集中创建、运行和管理计划任务：S EventBridge cheduler。使用 EventBridge Scheduler，您可以使用 cron 和速率表达式为重复模式创建计划，也可以配置一次性调用。您可以设置灵活的交付时间窗口、定义重试限制，并为失败的 API 调用设置最大保留时间。  
Scheduler 具有高度可定制性，与计划规则相比，它具有更高的可扩展性，具有更广泛的目标 API 操作和 Amazon 服务。建议您使用此调度器按计划调用目标。  
有关更多信息，请参阅[创建计划](using-eventbridge-scheduler.md#using-eventbridge-scheduler-create)或《*[EventBridge 日程安排用户指南》](https://docs.amazonaws.cn/scheduler/latest/UserGuide/what-is-scheduler.html)*。

在中创建计划规则时， EventBridge 可以指定决定何时 EventBridge 运行该规则的计划模式：
+ 使用 *cron* 表达式在特定的时间和日期运行规则。
+ 使用 *rate* 表达式定期运行规则。

## Cron 表达式
<a name="eb-cron-expressions"></a>

Cron 表达式有六个必填字段，之间以空格分隔。

**语法**

```
cron(fields)
```


| **字段** | **值** | **通配符** | 
| --- | --- | --- | 
|  Minutes  |  0-59  |  , - \$1 /  | 
|  Hours  |  0-23  |  , - \$1 /  | 
|  D ay-of-month  |  1-31  |  , - \$1 ? / L W  | 
|  Month  |  1-12 或 JAN-DEC  |  , - \$1 /  | 
|  D ay-of-week  |  1-7 或 SUN-SAT  |  , - \$1 ? L \$1  | 
|  Year  |  1970-2199  |  , - \$1 /  | 

**通配符**
+ **,**（逗号）通配符包含其他值。在“Month”字段中，JAN、FEB 和 MAR 包含 January、February 和 March。
+ **-**（破折号）通配符用于指定范围。在“Day”字段中，1-15 包含指定月份的 1 - 15 日。
+ **\$1**（星号）通配符包含该字段中的所有值。在“Hours”字段中，**\$1** 包括每个小时。不能在 Day-of-month和 Day-of-week字段中同时使用 **\$1**。如果您在一个中使用它，则必须在另一个中使用 **?** 。
+ **/**（斜杠）通配符用于指定增量。在“Minutes”字段中，您可以输入 1/10 以指定从一个小时的第一分钟开始的每个第十分钟 (例如，第 11 分钟、第 21 分钟和第 31 分钟，依此类推)。
+ **?**（问号）通配符用于指定任何内容。在该 Day-of-month字段中，您可以输入 **7**，如果一周中的任何一天可以接受，则可以输入**？** 在 Day-of-week野外。
+ ** 或 ** 字段中的 Day-of-monthL Day-of-week 通配符用于指定月或周的最后一天。
+ 该 Day-of-month字段中的**W**通配符指定工作日。在该 Day-of-month字段中，**3W**指定最接近该月第三天的工作日。
+  Day-of-week字段中的 **\$1** 通配符指定一个月内一周中指定某一天的特定实例。例如，3\$12 指该月的第二个星期二：3 指的是星期二，因为它是每周的第三天，2 是指该月内该类型的第二天。
**注意**  
如果使用 '\$1' 字符，则只能在 day-of-week字段中定义一个表达式。例如，`"3#1,6#3"` 是无效的，因为它被解释为两个表达式。

**限制**
+ 您无法在同一 cron 表达式中为 Day-of-month 和 Day-of-week 字段同时指定值。如果您在其中一个字段中指定值或 \$1（星号），则必须在另一个字段中使用 **?**（问号）。
+ 不支持产生的速率快于 1 分钟的 Cron 表达式。

**示例**  
在创建带计划的规则时，可以使用以下示例 cron 字符串。


| 分钟 | 小时 | 日期 | 月份 | 星期几 | 年 | 意义 | 
| --- | --- | --- | --- | --- | --- | --- | 
|  0  |  10  |  \$1  |  \$1  |  ?  |  \$1  |  每天上午 10:00 (UTC\$10) 运行  | 
|  15  |  12  |  \$1  |  \$1  |  ?  |  \$1  |  每天中午 12:15 (UTC\$10) 运行  | 
|  0  |  18  |  ?  |  \$1  |  MON-FRI  |  \$1  |  每星期一到星期五的下午 6:00 (UTC\$10) 运行  | 
|  0  |  8  |  1  |  \$1  |  ?  |  \$1  |  每月第 1 天上午 8:00 (UTC\$10) 运行  | 
|  0/15  |  \$1  |  \$1  |  \$1  |  ?  |  \$1  |  每 15 分钟运行一次  | 
|  0/10  |  \$1  |  ?  |  \$1  |  MON-FRI  |  \$1  |  从星期一到星期五，每 10 分钟运行一次  | 
|  0/5  |  8-17  |  ?  |  \$1  |  MON-FRI  |  \$1  |  每星期一到星期五的上午 8:00 到下午 5:55 (UTC\$10) 之间，每隔 5 分钟运行一次  | 
|  0/30  |  20-2  |  ?  |  \$1  |  MON-FRI  |  \$1  |  星期一至星期五，从起始日晚上 10:00 至次日凌晨 2:00 (UTC) 每隔 30 分钟运行一次 星期一凌晨 12:00 至凌晨 2:00 (UTC) 运行。  | 



以下示例创建一条规则，在每天中午 12:00 (UTC\$10) 运行。

```
aws events put-rule --schedule-expression "cron(0 12 * * ? *)" --name MyRule1
```

以下示例创建一条规则，在每天下午 2:05pm 和 2:35pm (UTC\$10) 运行。

```
aws events put-rule --schedule-expression "cron(5,35 14 * * ? *)" --name MyRule2
```

以下示例创建一条规则，从 2019 到 2022 年在每个月最后一个周五的上午 10:15 (UTC\$10) 运行。

```
aws events put-rule --schedule-expression "cron(15 10 ? * 6L 2019-2022)" --name MyRule3
```

## Rate 表达式
<a name="eb-rate-expressions"></a>

*Rate 表达式*在创建计划事件规则时启动，然后按照其定义的计划运行。

Rate 表达式有两个必填字段，之间以空格分隔。

**语法**

```
rate(value unit)
```

值  
一个正数。

unit  
时间单位。需要不同的单位，例如，对于值 1 为 `minute`；对于大于 1 的值 1 为 `minutes`。  
有效值：minute \$1 minutes \$1 hour \$1 hours \$1 day \$1 days

**限制**  
如果值等于 1，则单位必须为单数。如果值大于 1，则单位必须为复数。例如，rate(1 hours) 和 rate(5 hour) 无效，而 rate(1 hour) 和 rate(5 hours) 有效。

**示例**  
以下示例说明如何在 Amazon CLI `put-rule`命令中使用速率表达式。第一个示例每分钟触发一次规则，第二个示例每 5 分钟触发一次规则，第三个示例每小时触发一次规则，第四个示例每天触发一次规则。

```
aws events put-rule --schedule-expression "rate(1 minute)" --name MyRule2
```

```
aws events put-rule --schedule-expression "rate(5 minutes)" --name MyRule3
```

```
aws events put-rule --schedule-expression "rate(1 hour)" --name MyRule4
```

```
aws events put-rule --schedule-expression "rate(1 day)" --name MyRule5
```