

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

# HealthOmics 執行中的任務生命週期
<a name="workflow-run-tasks"></a>

*任務*是執行中的單一程序。HealthOmics 會將工作流程中的每個任務映射至最適合任務所需資源的模擬運算執行個體類型。您可以在工作流程定義中指定所需的資源。如需詳細資訊，請參閱 [HealthOmics 任務的運算和記憶體需求](memory-and-compute-tasks.md)。

HealthOmics 為要使用的任務提供暫時執行儲存體。HealthOmics 會將任務輸入檔案複製到臨時執行儲存體，做為唯讀檔案。HealthOmics 提供符號連結，讓任務可以從工作目錄中存取輸入檔案。任務只能存取您在工作流程定義檔案中宣告的檔案。

## 任務狀態值
<a name="task-status-values"></a>

您可以透過監控任務狀態來追蹤任務的進度。當您開始執行時，HealthOmics **Pending** 會將執行中每個任務的任務狀態設定為 。當任務開始並經過生命週期時，HealthOmics 會更新狀態值，以反映其目前的進度。

您可以使用下列任一方法擷取任務狀態：
+  HealthOmics 主控台會在 **Run details** 頁面上顯示執行中每個任務的狀態。
+ **GetRunTask** API 操作會傳回任務狀態。
+ 您可以使用 EventBridge 事件來監控任務狀態。如需詳細資訊，請參閱[搭配 使用 EventBridge AWS HealthOmics](eventbridge.md)。

您可以使用 **GetRunTask** API 操作擷取任務的目前狀態。HealthOmics 主控台會在 **Run details** 頁面上顯示執行中每個任務的狀態。

HealthOmics 支援下列任務狀態值：

**待定**  
您的任務正在佇列中，正在等待啟動。任務在啟動前會短暫處於待定狀態。  
+ 在您的帳戶達到並行任務的數量上限之後，任務會保留在待定狀態。
+ 如果執行是達到其任何資源最大值的執行群組的一部分，則任務會保持在待定狀態。
+ 您可以調整執行優先順序，以便在其他排入佇列的執行之前，特定排入佇列的執行及其任務開始。如需執行優先順序的詳細資訊，請參閱 [執行優先順序](creating-run-groups.md#run-priority)

**啟動**  
HealthOmics 正在建立任務並佈建任務所需的資源，例如工作流程任務節點。

**執行中**  
HealthOmics 正在處理任務時，任務狀態正在執行。

**正在停止**  
完成任務處理並匯出輸出資料後，任務會轉換為停止。  
+ HealthOmics 會取消佈建工作流程任務節點。

**已完成**  
HealthOmics 已完成處理任務，並將輸出資料傳輸到執行儲存檔案系統。

**失敗**  
HealthOmics 在處理任務時發生錯誤，而且尚未完成。  
+ 任務會轉換為停止狀態 (HealthOmics 取消佈建資源），然後轉換為失敗狀態。
+ 如果錯誤是服務錯誤 (5XX HTTP 狀態碼），且工作流程支援此任務的重試，則 HealthOmics 會嘗試再次處理任務。HealthOmics 會指派新的任務 ID 給重試。

**已取消**  
HealthOmics 會在使用者啟動取消執行的請求後停止任務。  
+ 任務會轉換為停止狀態 (HealthOmics 取消佈建資源），然後轉換為已取消狀態。

## 對工作流程任務進行故障診斷
<a name="debugging-tasks"></a>

以下是疑難排解任務的最佳實務和考量事項。
+ 任務日誌依賴`STDOUT`任務並`STDERR`產生任務。如果任務中使用的應用程式未產生其中任何一個，則不會有任務日誌。若要協助偵錯，請在 `verbose` 模式下使用應用程式。
+ 若要檢視任務中執行的命令及其插補值，請使用 `set -x` Bash 命令。這有助於判斷任務是否使用正確的輸入，並識別錯誤可能讓任務無法如預期般執行的位置。
+ 使用 `echo`命令將變數的值輸出到 ` STDOUT`或 `STDERR`。這可協助您確認它們已如預期般設定。
+ 使用 之類的命令來`ls -l`` <name_of_input_file>`確認輸入是否存在，且具有預期的大小。如果不是，這可能會顯示先前任務因為錯誤而產生空輸出的問題。
+ 在任務指令碼`df -Ph . | awk 'NR==2 {print $4}'`中使用 命令來判斷任務目前可用的空間，並協助識別您可能需要使用其他儲存配置執行工作流程的情況。

在任務指令碼中包含上述任何命令，會假設任務容器也包含這些命令，而且它們位於容器環境`path`的 上。