使用超时限制任务和可运行项的运行时间

本文档介绍了如何通过设置超时来限制任务和可运行对象的运行时间。

超时用于指定允许任务或可运行状态运行的时间。 Batch 不允许作业运行超过 14 天,也不会为单个任务和可运行项设置默认超时。因此,单个任务或可运行状态最长可以运行 14 天,然后才会自动失败。但是,如果您的任务和可运行对象不会运行这么长时间,此配置可能会导致意外费用和延迟。为防止运行时间过长,您可以为任务和可运行对象设置超时。

准备工作

设置超时

您可以为可运行对象和/或任务设置超时。可运行对象的超时指定该可运行对象的最长运行时间。任务的超时指定该任务的最长运行时间,即其可运行项的所有单独运行时间的总和。例如,如果某个任务有 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 的问题排查文档

后续步骤