共用方式為


Azure Batch 作業和工作錯誤

新增、排程或執行 Azure Batch 作業和工作時,可能會發生各種錯誤。 可以直接偵測新增作業和工作時發生的錯誤。 API、命令列或使用者介面通常會立即傳回任何失敗。 本文涵蓋在提交作業和工作之後可能發生的錯誤,以及如何檢查和處理這些錯誤。

作業失敗

作業是指一或多個工作的群組,這些工作指定了要執行的命令行。 新增作業時,可以指定下列選擇性參數。 這些參數會影響作業失敗的方式。

  • JobConstraints。 可以選擇性使用 maxWallClockTime 屬性,以設定作業在作用中或執行中的時間上限。 如果作業超過 maxWallClockTime,作業就會終止,且 JobExecutionInformation 中的屬性 terminateReason 將被設定為MaxWallClockTimeExpiry

  • JobPreparationTask。 可以選擇性地一個作業準備工作,讓其在排程執行作業工作的每個計算節點上執行。 節點會在首次執行作業的工作之前執行作業準備工作。 如果作業準備工作失敗,則工作不會執行,且作業也不會完成。

  • JobReleaseTask。 選擇性地為具有作業準備工作的作業指定作業釋放工作。 當作業終止時,作業釋放工作會在執行作業準備工作的每個集區節點上執行。 如果作業釋放工作失敗,則作業仍會移至 completed 狀態。

在 Azure 入口網站中,您可以在批次 [新增作業] 畫面的 [作業管理員]、[準備和釋放工作] 和 [進階] 區段中設定這些參數。

作業屬性

檢查 JobExecutionInformation 中的下列作業屬性是否存在錯誤:

  • terminateReason 屬性指示 MaxWallClockTimeExpiry 作業是否超出作業條件約束中指定的 maxWallClockTime,因此作業已終止。 如果作業的 onTaskFailure 屬性設定為 performExitOptionsJobAction,則此屬性也可設為 taskFailed,並且如果具有退出條件約束指定 terminatejobjobAction,則工作會失敗。

  • 如果發生排程錯誤,則會設定 JobSchedulingError 屬性。

作業準備工作

當節點第一次執行作業的工作時,作業準備工作的執行個體會在每個計算節點上執行。 您可以將作業準備工作視為工作範本,其中可執行多個執行個體,數目最多可與集區中的節點數目一樣。 檢查作業準備工作執行個體,確認是否存在錯誤。

您可以使用 Job - List Preparation and Release Task Status API,列出指定作業的所有作業準備和釋放工作執行個體的執行狀態。 如同其他工作,JobPreparationTaskExecutionInformation 具有 failureInfoexitCoderesult 等屬性。

當作業準備工作執行時,觸發作業準備工作的工作會移至 preparingtaskState。 如果作業準備工作失敗,則觸發工作會還原為 active 狀態,並且不會執行。

如果作業準備工作失敗,則觸發作業工作不會執行。 作業未完成且停滯不前。 如果沒有包含可排程工作的其他作業,則集區可能會閒置。

作業釋放工作

在執行作業準備工作的每個節點上,當作業終止時,則作業釋放工作執行個體會執行。 檢查作業釋放工作執行個體,確認是否存在錯誤。

您可以使用 Job - List Preparation and Release Task Status API,列出指定作業的所有作業準備和釋放工作執行個體的執行狀態。 如同其他工作,JobReleaseTaskExecutionInformation 具有 failureInfoexitCoderesult 等屬性。

如果一或多個作業釋放工作失敗,則作業仍會終止,並移至 completed 狀態。

工作失敗

作業工作可能會因為以下原因而失敗:

  • 工作命令列失敗,並傳回非零的結束代碼。
  • 為工作指定的一或多個 resourceFiles 未下載。
  • 為工作指定的一或多個 outputFiles 未上傳。
  • 工作的已耗用時間超過 TaskConstraints 中指定的屬性 maxWallClockTime

在所有情況下,檢查下列屬性是否有錯誤,並查看錯誤的相關資訊:

  • TaskExecutionInformation 屬性包含多個可提供錯誤相關資訊的屬性。 taskExecutionResult 會指出工作失敗的原因,而 exitCodefailureInfo 提供有關失敗的詳細資訊。

  • 無論工作成功還是失敗,一律會移至 completedTaskState

考慮工作失敗對作業以及任何工作相依性的影響。 您可以指定 ExitConditions 來設定相依性和作業設定動作。

  • DependencyAction 控制是要封鎖或執行相依於失敗工作的工作。
  • JobAction 控制失敗的工作是否會導致作業停用、終止或保持不變。

工作命令列

工作命令列不會在計算節點上的殼層下執行,因此其無法以原生方式利用殼層功能,例如環境變數擴充。 若要利用此類功能,您必須在命令列中叫用殼層。 如需詳細資訊,請參閱環境變數的命令列擴充功能

工作命令行輸出會寫入 stderr.txtstdout.txt 檔案。 應用程式還可能會寫入應用程式專屬的記錄檔。 請務必為應用程式實行全面的錯誤檢查,以便即時偵測並診斷問題。

工作記錄

如果執行工作的集區節點仍然存在,則可以取得並檢視工作記錄檔。 數個 API 允許列出和取得工作檔案,例如 File - Get From Task。 您也可以使用 Azure 入口網站列出和檢視工作或節點的記錄檔。

  1. 在節點的 [概觀] 頁面頂端,選取 [上傳批次記錄]

    Screenshot of a node overview page with Upload batch logs highlighted.

  2. 在 [上傳 Batch 記錄] 頁面上,選取 [選擇儲存體容器],選取要上傳至的 Azure 儲存體容器,然後選取 [開始上傳]

    Screenshot of the Upload batch logs page.

  3. 您可以從儲存體容器頁面檢視、開啟或下載記錄。

    Screenshot of task logs in a storage container.

輸出檔案

由於 Batch 集區和集區節點通常是暫時性節點,因此在持續新增和刪除節點的情況下,最好在作業執行時儲存記錄檔。 工作輸出檔案是將記錄檔儲存至 Azure 儲存體的簡便方式。 如需詳細資訊,請參閱使用 Batch 服務 API 將工作資料保存到 Azure 儲存體

每次上傳檔案時,Batch 都會將 fileuploadout.txtfileuploaderr.txt 兩個記錄檔寫入計算節點中。 若要進一步了解特定錯誤,您可以檢查這些記錄檔。 如果從未嘗試上傳檔案 (例如因為工作本身無法執行),則這些記錄檔不會存在。

下一步