

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

# 任务和任务执行状态
<a name="iot-jobs-lifecycle"></a>

以下各节描述了 AWS IoT 任务的生命周期和任务执行的生命周期。

## 任务状态
<a name="iot-jobs-states"></a>

下图显示了 AWS IoT 作业的不同状态。

![\[该图显示了 AWS IoT 作业的不同状态。\]](http://docs.aws.amazon.com/zh_cn/iot/latest/developerguide/images/job-states-diagram.png)


您使用 J AWS IoT obs 创建的任务可能处于以下状态之一：
+ 

**SCHEDULED**  
在使用 AWS IoT 控制台、[CreateJob](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJob.html)API 或 API 创建初始任务或[CreateJobTemplate](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJobTemplate.html)任务模板期间，您可以在 AWS IoT 控制台或 [CreateJob](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJob.html)API 或 [CreateJobTemplate](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJobTemplate.html)API 中选择可选`SchedulingConfig`的计划配置。当您启动包含特定 `startTime`、`endTime` 和 `endBehavior` 的计划任务时，任务状态将更新为 `SCHEDULED`。当任务达到您选择的 `startTime` 或下一个维护时段的 `startTime` 时（如果您在维护时段中选择了任务推出），状态将从 `SCHEDULED` 更新为 `IN_PROGRESS`，并开始将任务文档推出到目标组中的所有设备。
+ 

**进行中**  
当您使用 AWS IoT 控制台或 [CreateJob](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJob.html)API 创建任务时，任务状态会更新为`IN_PROGRESS`。在任务创建期间， AWS IoT Jobs 开始向目标组中的设备推出任务执行。在所有任务执行都推出后， AWS IoT Jobs 就会等待设备完成远程操作。

  有关适用于进行中任务的并发和限制的信息，请参阅 [AWS IoT 职位限制](job-limits.md)。
**注意**  
当 `IN_PROGRESS` 任务达到当前维护时段结束时，任务文档的推出将停止。该任务将更新为 `SCHEDULED`，直至下一个维护时段的 `startTime`。
+ 

**COMPLETED**  
连续任务通过以下方式之一进行处理：
  + 对于*未*选择可选计划配置的连续任务，此任务始终处于进行中，并继续针对添加到目标组的任何新设备运行。它从不会达到 `COMPLETED` 状态。
  + 对于*选择*了可选计划配置的连续任务，以下表述是正确的：
    + 如果*提供了* `endTime`，则连续任务将在 `endTime` 已过且所有任务执行都达到最终状态时达到 `COMPLETED` 状态。
    + 如果在可选计划配置中*未提供* `endTime`，则连续任务将继续执行任务文档推出。

对于快照任务，当其所有任务执行都进入最终状态（如 `SUCCEEDED`、`FAILED`、`TIMED_OUT`、`REMOVED` 或 `CANCELED`）时，任务状态更改为 `COMPLETED`。
+ 

**CANCELED**  
当您使用 AWS IoT 控制台、[CancelJob](https://docs.aws.amazon.com/iot/latest/apireference/API_CancelJob.html)API 或取消任务时[ 任务中止配置](jobs-configurations-details.md#job-abort-using)，任务状态将更改为`CANCELED`。在任务取消期间， AWS IoT 作业开始取消先前创建的任务执行。

  有关适用于正在取消的任务的并发和限制的信息，请参阅 [AWS IoT 职位限制](job-limits.md)。
+ 

**DELETION\$1IN\$1PROGRESS**  
当您使用 AWS IoT 控制台或 [DeleteJob](https://docs.aws.amazon.com/iot/latest/apireference/API_DeleteJob.html)API 删除任务时，任务状态会更改为`DELETION_IN_PROGRESS`。在删除任务期间， AWS IoT 作业开始删除先前创建的任务执行。删除所有任务执行后，该任务将从您的 AWS 账户中消失。

## 任务执行状态
<a name="iot-job-execution-states"></a>

下表显示了 AWS IoT 任务执行的不同状态，以及状态更改是由设备启动的，还是由 AWS IoT 任务启动的。


**任务执行状态和源**  

| 任务执行状态 | 由设备发起？ | 由 AWS IoT 乔布斯发起？ | 终端状态？ | 是否可以重试？ | 
| --- | --- | --- | --- | --- | 
| QUEUED | 否 | 是 | 否 | 不适用 | 
| IN\$1PROGRESS | 是 | 否 | 否 | 不适用 | 
| SUCCEEDED | 是 | 否 | 是 | 不适用 | 
| FAILED | 是 | 否 | 是 | 是 | 
| TIMED\$1OUT | 否 | 是 | 是 | 是 | 
| REJECTED | 是 | 否 | 是 | 否 | 
| REMOVED | 否 | 是 | 是 | 否 | 
| CANCELED | 否 | 是 | 是 | 否 | 

以下部分详细介绍了使用 AWS IoT 作业创建任务时推出的任务执行状态。
+ 

**QUEUED**  
当 AWS IoT Jobs 为目标设备推出任务执行时，任务执行状态将设置为`QUEUED`。任务执行保留为 `QUEUED` 状态，直到：
  + 您的设备收到任务执行，调用任务 API 操作并将状态报告为 `IN_PROGRESS`。
  + 您取消任务或任务执行，或者当满足您指定的中止条件时，状态更改为 `CANCELED`。
  + 您的设备已从目标组中移除且状态更改为 `REMOVED`。  
![\[此图像显示排队的任务执行如何将状态更改为 IN_PROGRESS 以及在设备不接受任务创建请求时如何拒绝任务。\]](http://docs.aws.amazon.com/zh_cn/iot/latest/developerguide/images/JE-queued-inprogress.png)
+ 

**进行中**  
如果您的 IoT 设备订阅了预留[任务主题](reserved-topics.md#reserved-topics-job)`$notify`和`$notify-next`，并且您的设备调用了 `StartNextPendingJobExecution` API 或 API，状态为`IN_PROGRESS`，则 AWS IoT Jobs 会将任务执行状态设置为。`UpdateJobExecution` `IN_PROGRESS`

  `UpdateJobExecution` API 可以多次调用，状态为 `IN_PROGRESS`。您可以使用 `statusDetails` 对象指定有关执行步骤的其他详细信息。
**注意**  
如果您为每台设备创建多个任务，则 AWS IoT Jobs 和 MQTT 协议无法保证交付顺序。
+ 

**SUCCEEDED**  
当您的设备成功完成远程操作时，设备必须调用状态为的 `UpdateJobExecution` API，`SUCCEEDED`以表示任务执行成功。 AWS IoT 然后，作业会更新任务执行状态并将其返回为`SUCCEEDED`。  
![\[此图像显示正在进行的任务执行如何失败以及如何重试执行。\]](http://docs.aws.amazon.com/zh_cn/iot/latest/developerguide/images/JE-success-path.png)
+ 

**FAILED**  
当您的设备无法完成远程操作时，设备必须调用状态为`UpdateJobExecution`的 API，`Failed`以表明任务执行失败。 AWS IoT 然后，作业会更新任务执行状态并将其返回为`Failed`。您可以使用[Job 执行重试配置](jobs-configurations-details.md#job-retry-configuration)重试设备的这一任务执行。  
![\[此图像显示正在进行的任务执行如何失败以及如何重试执行。\]](http://docs.aws.amazon.com/zh_cn/iot/latest/developerguide/images/JE-inprogress-failed.png)
+ 

**超时**  
当您的设备在状态为时未能完成任务步骤`IN_PROGRESS`，或者在正在进行的计时器的超时时间内未能完成远程操作时，J AWS IoT obs 会将任务执行状态设置为`TIMED_OUT`。您还有一个用于正在进行的任务的每个任务步骤的步骤计时器，并且仅适用于任务执行。正在进行的计时器持续时间是使用 [任务执行超时配置](jobs-configurations-details.md#job-timeout-configuration) 的 `inProgressTimeoutInMinutes` 属性指定的。您可以使用[Job 执行重试配置](jobs-configurations-details.md#job-retry-configuration)重试设备的这一任务执行。  
![\[此图像显示正在进行的任务执行如何超时以及如何重试执行。\]](http://docs.aws.amazon.com/zh_cn/iot/latest/developerguide/images/JE-inprogress-timedout.png)
+ 

**REJECTED**  
当您的设备收到无效或不兼容的请求时，设备必须调用状态为`UpdateJobExecution`的 API `REJECTED`。 AWS IoT 然后，作业会更新任务执行状态并将其返回为`REJECTED`。
+ 

**REMOVED**  
当设备不再是任务执行的有效目标时，例如当它脱离动态事物组时， AWS IoT Jobs 将任务执行状态设置为 `REMOVED`。您可以将事物重新附加到目标组，然后重新启动设备的任务执行。
+ 

**CANCELED**  
当您使用控制台或或 `CancelJobExecution` API 取消任务或取消任务执行时，或者当满足使用指定的中止条件时， AWS IoT 作业会取消该任务并将任务执行状态设置[ 任务中止配置](jobs-configurations-details.md#job-abort-using)为。`CancelJob` `CANCELED`