

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 任務和任務執行狀態
<a name="iot-jobs-lifecycle"></a>

下列各節說明 AWS IoT 任務的生命週期和任務執行的生命週期。

## 任務狀態
<a name="iot-jobs-states"></a>

下圖顯示 AWS IoT 任務的不同狀態。

![顯示 AWS IoT 任務不同狀態的影像。](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/images/job-states-diagram.png)


您使用 任務建立 AWS IoT 的任務可以處於下列其中一種狀態：
+ 

**已排程**  
在使用 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 建立初始任務或任務範本期間，您可以在 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`，並開始將任務文件推展至目標群組中的所有裝置。
+ 

**IN\_PROGRESS**  
當您使用 AWS IoT 主控台或 [CreateJob](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJob.html) API 建立任務時，任務狀態會更新為 `IN_PROGRESS`。在建立任務期間, AWS IoT 任務開始將任務執行推展到目標群組中的裝置。在所有任務執行推展完畢之後， AWS IoT 任務會等待裝置完成遠端動作。

  如需套用至進行中任務的並行和限制的相關資訊，請參閱 [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\_IN\_PROGRESS**  
當您使用 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\_PROGRESS | 是 | 否 | 否 | 不適用 | 
| SUCCEEDED | 是 | 否 | 是 | 不適用 | 
| FAILED | 是 | 否 | 是 | 是 | 
| TIMED\_OUT | 否 | 是 | 是 | 是 | 
| REJECTED | 是 | 否 | 是 | 否 | 
| REMOVED | 否 | 是 | 是 | 否 | 
| CANCELED | 否 | 是 | 是 | 否 | 

下一節將詳細說明當您使用 任務建立任務時，所推出的 AWS IoT 任務執行狀態。
+ 

**QUEUED**  
當 AWS IoT 任務推出目標裝置的任務執行時，任務執行狀態會設為 `QUEUED`。任務執行會維持在 `QUEUED` 狀態，直到：
  + 您的裝置接收任務執行，並叫用任務 API 操作，將狀態報告為 `IN_PROGRESS`。
  + 您取消任務或任務執行，或在符合您指定的中止條件時，狀態會變更為 `CANCELED`。
  + 您的裝置已從目標群組中移除，且狀態變更為 `REMOVED`。  
![顯示已排入佇列的任務執行狀態如何變更為 IN_PROGRESS，以及當裝置不接受任務建立請求時，任務會如何顯示 REJECTED 的影像。](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/images/JE-queued-inprogress.png)
+ 

**IN\_PROGRESS**  
如果您的 IoT 裝置訂閱預留 [任務主題](reserved-topics.md#reserved-topics-job)`$notify`和 `$notify-next`，而且您的裝置調用狀態為 的 `StartNextPendingJobExecution` API 或 `UpdateJobExecution` API`IN_PROGRESS`， AWS IoT Jobs 會將任務執行狀態設定為 `IN_PROGRESS`。

  此 `UpdateJobExecution` API 可多次叫用，且狀態為 `IN_PROGRESS`。您可以使用 `statusDetails` 物件來指定關於執行步驟的其他詳細資訊。
**注意**  
如果您為每個裝置建立多個任務， AWS IoT Jobs 和 MQTT 通訊協定不保證交付順序。
+ 

**SUCCEEDED (成功)**  
當您的裝置成功完成遠端操作時，裝置必須調用狀態為 的 `UpdateJobExecution` API`SUCCEEDED`，以指出任務執行成功。 AWS IoT 任務接著會更新並傳回任務執行狀態為 `SUCCEEDED`。  
![顯示進行中任務執行會如何發生失敗以及如何重試執行的影像。](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/images/JE-success-path.png)
+ 

**失敗**  
當您的裝置無法完成遠端操作時，裝置必須呼叫狀態為 的 `UpdateJobExecution` API`Failed`，以指出任務執行失敗。 AWS IoT 任務接著會更新並傳回任務執行狀態為 `Failed`。您可以使用 [任務執行重試組態](jobs-configurations-details.md#job-retry-configuration) 未裝置重試此任務執行。  
![顯示進行中任務執行會如何發生失敗以及如何重試執行的影像。](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/images/JE-inprogress-failed.png)
+ 

**TIMED\_OUT**  
當您的裝置在狀態為 時無法完成任務步驟`IN_PROGRESS`，或無法在進行中計時器的逾時持續時間內完成遠端操作時， AWS IoT Jobs 會將任務執行狀態設定為 `TIMED_OUT`。您也可以為進行中任務的每個任務步驟設定一個步驟計時器，且僅適用於任務執行。此進行中計時器期間使用 [任務執行逾時組態](jobs-configurations-details.md#job-timeout-configuration) 的 `inProgressTimeoutInMinutes` 屬性指定。您可以使用 [任務執行重試組態](jobs-configurations-details.md#job-retry-configuration) 未裝置重試此任務執行。  
![顯示進行中任務執行會如何發生逾時以及如何重試執行的影像。](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/images/JE-inprogress-timedout.png)
+ 

**REJECTED**  
當您的裝置收到無效或不相容的請求時，裝置必須調用狀態為 `REJECTED`. AWS IoT Jobs 的 `UpdateJobExecution` API，然後更新並傳回任務執行狀態為 `REJECTED`。
+ 

**REMOVED**  
當您的裝置不再是任務執行的有效目標時，例如當它與動態物件群組分離時， AWS IoT 任務會將任務執行狀態設置為 `REMOVED`。您可以將物件重新附加到目標群組，然後重新啟動裝置的任務執行。
+ 

**CANCELED**  
當您使用主控台或 或 `CancelJob` `CancelJobExecution` API 取消任務或取消任務執行，或[ 任務中止組態](jobs-configurations-details.md#job-abort-using)滿足使用 指定的中止條件時， AWS IoT 任務會取消任務，並將任務執行狀態設定為 `CANCELED`。