使用逾時限制限制工作和可執行項目的執行時間

本文說明如何設定逾時,限制工作和可執行檔的執行時間。或者,如果您希望可執行的項目在工作中的其他可執行項目完成執行後立即完成,請改用背景可執行項目

逾時會指定允許工作或可執行檔執行的時間長度。Batch 不允許作業執行超過 14 天,也不會為個別工作和可執行檔設定預設逾時。因此,個別工作或可執行檔最長可執行 14 天,之後就會自動失敗。但如果工作和可執行檔並非要執行這麼久,這項設定可能會導致意外費用和延遲。為避免執行時間過長,您可以為工作和可執行檔設定逾時。

事前準備

  1. 如果您從未使用過 Batch,請參閱「開始使用 Batch」,並完成專案和使用者的必要條件,啟用 Batch。
  2. 如要取得建立作業所需的權限,請要求管理員授予下列 IAM 角色:

    如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

    您或許還可透過自訂角色或其他預先定義的角色取得必要權限。

設定逾時

您可以為可執行檔、工作或兩者設定逾時。可執行檔的逾時時間會指定該可執行檔的執行時間上限。任務的逾時時間會指定該任務的執行時間上限,也就是其可執行項目的所有個別執行時間總和。舉例來說,如果工作有 3 個可執行檔,且全部同時執行 1 分鐘,則工作執行時間為 3 分鐘,而非 1 分鐘。

如果設定重疊的逾時時間 (例如可執行檔和可執行檔工作都設有逾時時間),只要超過其中一個逾時時間,就會觸發自動失敗。舉例來說,假設您將工作逾時時間設為 60 秒,而該工作每個可執行的逾時時間則設為 120 秒。接著,當可執行檔的執行時間總和超過 60 秒時,這個範例工作和所有可執行檔都會失敗,且無法觸發 120 秒的逾時。

如要為工作中的工作和可執行檔設定適當的逾時時間,請分析先前執行的類似工作記錄,判斷類似工作負載的工作和可執行檔一般執行時間。

設定工作的逾時時間

使用 Google Cloud CLI 或 REST API 建立工作,並在 JSON 檔案的 taskSpec 物件中加入 maxRunDuration 欄位

{
    "taskGroups": [
      {
        "taskSpec": {
          ...
          "maxRunDuration": "TIMEOUT"
        }
      }
    ]
}

TIMEOUT 替換為允許工作執行的秒數上限或分數部分。例如:255s

如果工作要將工作逾時時間設為 255 秒,JSON 設定檔會類似於下列內容:

{
    "taskGroups": [
      {
        "taskSpec": {
          "runnables": [
            {
              "script": {
                "text": "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
              }
            }
          ],
          "maxRunDuration": "255s"
        },
        "taskCount": 3
      }
    ],
    "logsPolicy": {
        "destination": "CLOUD_LOGGING"
    }
}

如果工作超過逾時時間,工作會自動失敗,且工作狀態事件和記錄中的結束代碼 50005 會指出逾時時間。如要進一步瞭解逾時問題,請參閱退出代碼 50005 的疑難排解說明文件

設定可執行檔的逾時時間

使用 Google Cloud CLI 或 REST API 建立工作,並在 JSON 檔案的 runnable 物件中加入 timeout 欄位

{
    "taskGroups": [
      {
        "taskSpec": {
          "runnables": [
            {
              ...
              "timeout": "TIMEOUT"
            }
          ]
        }
      }
    ]
}

TIMEOUT 替換為您要允許可執行檔執行的秒數上限或分數區段。例如:3.5s

如果工作為可執行的項目設定 3.5 秒的逾時時間,JSON 設定檔會類似於下列內容:

{
    "taskGroups": [
      {
        "taskSpec": {
          "runnables": [
            {
              "script": {
                "text": "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
              },
              "timeout": "3.5s"
            }
          ]
        },
        "taskCount": 3
      }
    ],
    "logsPolicy": {
        "destination": "CLOUD_LOGGING"
    }
}

如果可執行的項目超過逾時時間,系統會自動讓該項目失敗,並在作業的狀態事件和記錄中,以結束代碼 50005 表示逾時。如要進一步瞭解逾時問題,請參閱退出代碼 50005 的疑難排解說明文件

後續步驟