本文档介绍了如何通过设置超时限制任务和可运行对象的运行时间。
超时用于指定允许任务或可运行对象运行的时间。批处理作业不允许运行超过 14 天,也不会为各个任务和可运行作业设置默认超时。因此,单个任务或可运行作业最长可运行 14 天,然后才会自动失败。但是,如果您的任务和可运行作业不打算运行这么长时间,此配置可能会导致意外费用和延迟。为防止运行时间过长,您可以为任务和可运行项设置超时。
准备工作
- 如果您之前未使用过批处理功能,请参阅开始使用批处理,并完成适用于项目和用户的前提条件,以启用批处理功能。
-
如需获得创建作业所需的权限,请让您的管理员为您授予以下 IAM 角色:
-
项目的 Batch Job Editor (
roles/batch.jobsEditor
) -
作业的服务账号(默认是默认的 Compute Engine 服务账号)上的 Service Account User (
roles/iam.serviceAccountUser
)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
-
项目的 Batch Job Editor (
设置超时
您可以为可运行对象和/或任务设置超时。可运行对象的超时指定了该可运行对象的运行时长上限。任务的超时指定了该任务的最大运行时间,该时间是其可运行对象的所有单独运行时间的总和。例如,如果某个任务有 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 的问题排查文档。