

• 2026 年 4 月 30 日之後將不再提供 AWS Systems Manager CloudWatch Dashboard。客戶可以繼續使用 Amazon CloudWatch 主控台來檢視、建立和管理其 Amazon CloudWatch 儀表板，就像現在一樣。如需詳細資訊，請參閱 [Amazon CloudWatch Dashboard 文件](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)。

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

# 了解命令狀態
<a name="monitor-commands"></a>

Run Command是 中的工具 AWS Systems Manager，會針對處理期間命令體驗的不同狀態，以及處理命令的每個受管節點，報告其詳細狀態資訊。您可以使用下列方法來監控命令狀態：
+ 在 Run Command 主控台介面的 **Commands** (命令) 標籤中選擇 **Refresh** (重新整理) 圖示。
+ 使用 AWS Command Line Interface () 呼叫 [list-commands](https://docs.aws.amazon.com/cli/latest/reference/ssm/list-commands.html) 或 [list-command-invocations](https://docs.aws.amazon.com/cli/latest/reference/ssm/list-command-invocations.html)AWS CLI。或使用 呼叫 [Get-SSMCommand](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-SSMCommand.html) 或 [Get-SSMCommandInvocation](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-SSMCommandInvocation.html) AWS Tools for Windows PowerShell。
+ 設定 Amazon EventBridge 以回應狀態或狀態變更。
+ 將 Amazon Simple Notification Service (Amazon SNS) 設定為針對所有狀態變更或 `Failed` 或 `TimedOut` 之類的特定狀態傳送通知。

## Run Command 狀態
<a name="monitor-about-status"></a>

Run Command 為以下三個領域報告狀態詳細資訊：外掛程式、呼叫和整體命令狀態。*外掛程式*是一種程式碼執行區塊，其在命令的 SSM 文件中有定義。如需外掛程式的詳細資訊，請參閱 [命令文件外掛程式參考](documents-command-ssm-plugin-reference.md)。

當您同時將命令傳送到多個受管節點，將每個節點視為命令的每個命令副本是一種*命令呼叫*。例如，如果您使用的是 `AWS-RunShellScript` 文件和將 `ifconfig` 命令傳送到 20 個執行個體，該命令會有 20 個叫用。每個命令呼叫會個別報告狀態。指定命令叫用的外掛程式也會個別報告狀態。

最後，Run Command 包含所有外掛程式和呼叫的彙總命令狀態。彙總命令狀態可能會與外掛程式或呼叫所回報的狀態不同，如以下資料表所示。

**注意**  
如果您使用 `max-concurrency` 或 `max-errors` 參數對大量受管節點執行命令，命令狀態會反映這些參數所實施的限制，如下列資料表所述。如需這些參數的相關資訊，請參閱 [大規模執行命令](send-commands-multiple.md)。


**命令外掛程式和呼叫的詳細狀態**  

| 狀態 | 詳細資訊 | 
| --- | --- | 
| 待定 | 該命令尚未傳送至受管節點或尚未被 SSM Agent 接收。如果代理程式未收到命令之前的時間長度等於 Timeout (seconds) (逾時 (秒)) 參數與 Execution timeout (執行逾時) 參數的總和，則狀態會變更為 Delivery Timed Out。 | 
| InProgress | Systems Manager 嘗試將命令傳送至執行個體，或由 SSM Agent 接收命令，並開始在受管節點上執行。根據所有命令外掛程式的結果，狀態變更為 Success、Failed、Delivery Timed Out 或 Execution Timed Out。異常情形：如果代理程式未執行或在節點上不可用，則命令狀態會保留在 In Progress，直到代理程式再次可用，或直到達到執行逾時限制為止。此狀態會接著變更為終止狀態。 | 
| 延遲 | 系統嘗試將命令傳送至受管節點，但未成功。系統會再次重試。 | 
| 成功 | 此狀態會在各種條件下傳回。此狀態不代表命令在節點成功處理。例如，SSM Agent 可以在受管節點上接收命令，並且由於 PowerShell ExecutionPolicy 阻止命令執行，命令會傳回零的結束程式碼。這是一個終端狀態。導致命令傳回 Success 狀態的條件為：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/systems-manager/latest/userguide/monitor-commands.html)  以資源群組為目標時，同樣的條件也適用。若要排除錯誤或取得更多命令執行的相關資訊，透過傳回適當的結束代碼 (非零結束代碼適用於命令失敗)，傳送處理錯誤或例外狀況的命令。  | 
| DeliveryTimedOut | 在總逾時過期前，不會將此命令傳送到受管理節點。總逾時不會計入父命令的 max-errors 限制，但它們不會影響父命令狀態是否為 Success、Incomplete 或 Delivery Timed Out。這是一個終端狀態。 | 
| ExecutionTimedOut | 命令自動化會在受管節點上開始，但是命令在執行逾時過期前未完成。執行超時計算為失敗，這將會傳送非零回覆，Systems Manager 將會停止嘗試執行命令自動化，並回報失敗狀態。 | 
| 失敗 |  命令在受管節點上未成功執行。若是外掛程式，這表示結果碼不為零。若是命令叫用，這表示一或多個外掛程式的結果碼不為零。呼叫失敗不會計入父命令的 max-errors 限制。這是一個終端狀態。 | 
| 已取消 | 命令在完成前已取消。這是一個終端狀態。 | 
| 交付成果 | 無法將命令傳送至受管節點。節點可能不存在或可能不回應。交付成果呼叫不會計入父命令的 max-errors 限制，但它們不會影響父命令狀態是否為 Success 或 Incomplete。例如，若命令中所有的呼叫狀態都是 Undeliverable，則命令狀態會傳回 Failed。但是，若命令進行 5 次呼叫，其中 4 次傳回了狀態 Undeliverable，1 次則傳回了狀態 Success，則父命令的狀態便是 Success。這是一個終端狀態。 | 
| 已終止 | 父命令超過其 max-errors 限制和系統已取消後續命令呼叫。這是一個終端狀態。 | 
| InvalidPlatform | 命令已傳送到與所選文件指定的所需平台不相符的受管節點。Invalid Platform 不會計入父命令的最高錯誤限制，但它確實會影響父命令狀態為成功或失敗。例如，若命令中所有的呼叫狀態都是 Invalid Platform，則命令狀態會傳回 Failed。但是，若命令進行 5 次呼叫，其中 4 次傳回了狀態 Invalid Platform，1 次則傳回了狀態 Success，則父命令的狀態便是 Success。這是一個終端狀態。 | 
| AccessDenied | 啟動命令的 AWS Identity and Access Management (IAM) 使用者或角色無法存取目標受管節點。 Access Denied不會計入父命令max-errors的限制，但確實會導致父命令狀態為 Success或 Failed。例如，若命令中所有的呼叫狀態都是 Access Denied，則命令狀態會傳回 Failed。但是，若命令進行 5 次呼叫，其中 4 次傳回了狀態 Access Denied，1 次則傳回了狀態 Success，則父命令的狀態便是 Success。這是一個終端狀態。 | 


**命令的詳細狀態**  

| 狀態 | 詳細資訊 | 
| --- | --- | 
| 待定 | 任何受管節點上的代理程式都尚未收到命令。 | 
| InProgress | 已將此命令傳送到至少一個受管節點，但在所有節點上都尚未達到最終狀態。 | 
| 延遲 | 系統嘗試將命令傳送至節點，但未成功。系統會再次重試。 | 
| 成功 | 在指定或目標受管節點上透過 SSM Agent 接收的命令且傳回零的結束程式碼。所有命令呼叫已達到終止狀態，而且未達到 max-errors 的值。此狀態不代表命令在所有指定或目標受管節點上順利處理。這是一個終端狀態。 若要排除錯誤或取得更多命令執行的相關資訊，透過傳回適當的結束代碼 (非零結束代碼適用於命令失敗)，傳送處理錯誤或例外狀況的命令。  | 
| DeliveryTimedOut | 在總逾時過期前，不會將此命令傳送到受管理節點。max-errors 或多個命令呼叫的值顯示為狀態 Delivery Timed Out。這是一個終端狀態。 | 
| 失敗 | 命令在受管節點上未成功執行。`max-errors` 或多個命令呼叫的值顯示為狀態 `Failed`。這是一個終端狀態。 | 
| 未完成 | 已在所有受管節點上嘗試命令且一或多個呼叫沒有值 Success。不過，沒有足夠的呼叫失敗，狀態會變為 Failed。這是一個終端狀態。 | 
| 已取消 | 命令在完成前已取消。這是一個終端狀態。 | 
| RateExceeded | 超過待處理呼叫帳戶配額的命令視為目標之受管節點數量。系統已在任何節點上執行命令前將其取消。這是一個終端狀態。 | 
| AccessDenied | 啟動命令的使用者或角色沒有存取目標資源群組的權限。AccessDenied 不會計入父命令的 max-errors 限制中，但可能會決定父命令的狀態是 Success 或 Failed。(例如，若命令中所有的叫用狀態為 AccessDenied，則傳回的命令狀態為 Failed。但是，若命令進行 5 次叫用，其中 4 次則傳回了狀態 AccessDenied，其中 1 次傳回狀態 Success，則父命令的狀態為 Success。) 這是一個終端狀態。 | 
| 標籤中沒有執行個體 | 命令瞄準的標籤金鑰對值或資源群組並未符合任何受管節點。這是一個終端狀態。 | 

## 了解命令逾時值
<a name="monitor-about-status-timeouts"></a>

執行命令時，Systems Manager 會強制執行下列逾時值。

**總逾時**  
在 Systems Manager 主控台中，您可以在 **Timeout (seconds)** (逾時 (秒)) 欄位中指定逾時值。傳送命令之後，Run Command 會檢查命令是否已過期。如果命令達到命令過期期限 (總逾時)，則它會將所有狀態為 `InProgress`、`Pending` 或 `Delayed` 之叫用的狀態變更為 `DeliveryTimedOut`。

![Systems Manager 主控台中的 Timeout (seconds) (逾時 (秒)) 欄位](http://docs.aws.amazon.com/zh_tw/systems-manager/latest/userguide/images/run-command-delivery-time-out-time-out-seconds.png)


在更技術的層面上，總逾時 (**Timeout (seconds)** (逾時 (秒)) 包含兩個逾時值，如下所示：

`Total timeout = "Timeout(seconds)" from the console + "timeoutSeconds": "{{ executionTimeout }}" from your SSM document`

例如，Systems Manager 主控台中 **Timeout (seconds)** (逾時 (秒)) 的預設值是 600 秒。如果您使用 `AWS-RunShellScript` SSM 文件執行命令，**"timeoutSeconds": "{{ executionTimeout }}"** 的預設值是 3600 秒，如下列文件範例所示：

```
  "executionTimeout": {
      "type": "String",
      "default": "3600",

  "runtimeConfig": {
    "aws:runShellScript": {
      "properties": [
        {
          "timeoutSeconds": "{{ executionTimeout }}"
```

這表示在系統將命令狀態設定為 `DeliveryTimedOut` 之前，執行時間為 4,200 秒 (70 分鐘)。

**執行逾時**  
在 Systems Manager 主控台中，您可以在 **Execution Timeout** (執行逾時) 欄位中指定執行逾時值 (如果有的話)。並非所有 SSM 文件都需要您指定執行逾時。僅在 SSM 文件中已定義對應的輸入參數時，才會顯示**執行逾時**欄位。如果指定了逾時，命令即必須在此期間內完成。

**注意**  
Run Command 依賴於 SSM Agent 文件終端機回應，以判斷命令是否已傳遞給代理程式。SSM Agent 必須傳送用於叫用或命令、被標記為 `ExecutionTimedOut` 的 `ExecutionTimedOut` 信號。

![Systems Manager 主控台中的 Execution Timeout (執行逾時) 欄位](http://docs.aws.amazon.com/zh_tw/systems-manager/latest/userguide/images/run-command-execution-timeout-console.png)


**預設執行逾時**  
如果 SSM 文件不要求您明確指定執行逾時值，則 Systems Manager 會強制執行硬式編碼預設執行逾時。

**Systems Manager 如何報告逾時**  
如果 Systems Manager 收到目標上 SSM Agent 的 `execution timeout` 回覆，則 Systems Manager 會將命令叫用標記為 `executionTimeout`。

如果 Run Command 不會收到來自 SSM Agent 的文件終端機回應，則命令叫用被標記為 `deliveryTimeout`。

為了判斷目標上的逾時狀態，SSM Agent 會結合所有參數和 SSM 文件的內容，以計算出 `executionTimeout`。當 SSM Agent 判斷命令已逾時，會將 `executionTimeout` 傳送至服務。

**Timeout (seconds)** (逾時 (秒)) 的預設為 3600 秒。**Execution Timeout** (執行逾時) 的預設也是 3600 秒。因此，命令的總預設逾時為 7200 秒。

**注意**  
SSM Agent 會根據 SSM 文件類型和文件版本的不同，來處理 `executionTimeout`。