设置任务超时(作业)

默认情况下,每个任务最长运行 10 分钟:您可以将其更改为更短或更长(最长 168 小时 [7 天])的时间。对超过 24 小时的超时时间的支持目前处于预览版阶段。

您可以按照本页中的说明设置任务超时。作业执行没有显式超时限制:所有任务都完成后,作业执行结束。

单位指定时长。您可以将超时时长指定为整数值,以秒、分钟或小时为单位。例如,如需将超时时长设置为 10 分 5 秒,请将值指定为 605 秒。

如果您的作业已启用重试,超时设置会应用于任务的每次尝试。如果任务尝试未能在此时间段内完成,它将会停止。作业运行时间越长,就越有可能遇到导致其失败的问题,例如下游依赖项失败、内存不足错误或基础架构问题。我们建议为所有作业启用重试,但对于包含长时间运行任务的作业,这一点尤为重要。

观察和处理维护事件

作业可能会定期执行维护事件。在维护事件期间,任何正在执行的任务都会从当前机器迁移到其他机器。此迁移过程会保留任务的整个状态。但是,迁移任务时,系统会暂停处理一小段时间。

维护事件是透明的,您无需对容器进行任何更改即可处理维护事件。请注意,每次任务开始和完成迁移时,Cloud Run 都会输出一条日志消息。

但是,如果要以特定方式监控或处理维护事件,您可以捕获 SIGTSTP 信号,此信号会在任务迁移之前 10 秒发送。迁移后,任务会在任务重启后立即收到 SIGCONT 信号。

下面的 Go 示例函数会捕获这些信号并输出日志条目:

func testSignals() {
    sigs := make(chan os.Signal, 1)
    signal.Notify(sigs, syscall.SIGTSTP, syscall.SIGCONT)
    go func() {
        for  {
            sig := <-sigs
            log.Printf("Got Signal: %v", sig)
        }
    }()
 }
 

所需的角色

如需获得配置 Cloud Run 作业所需的权限,请让管理员向您授予以下 IAM 角色:

如需查看与 Cloud Run 关联的 IAM 角色和权限的列表,请参阅 Cloud Run IAM 角色Cloud Run IAM 权限。如果您的 Cloud Run 作业与 Google Cloud API(例如 Cloud 客户端库)进行交互,请参阅服务身份配置指南。如需详细了解如何授予角色,请参阅部署权限管理访问权限

设置任务超时时间

如需为 Cloud Run 作业指定任务超时,请执行以下操作:

控制台

  1. 在 Google Cloud 控制台中,进入 Cloud Run 作业页面:

    转到 Cloud Run

  2. 点击部署容器,然后选择作业以填写初始作业设置页面。如果要配置现有作业,请点击作业,然后点击修改

  3. 点击容器、变量和 Secret、连接、安全性以展开作业属性页面。

  4. 点击常规标签页。

    图片

    • 任务超时字段中,指定当前作业中的作业任务的时长上限,并选择时间单位。您只能将超时时长指定为整数值,以分钟小时为单位。例如,如需将时长设置为 10 分 5 秒,请在任务超时字段中指定 605,并将时间单位设置为
  5. 点击创建更新

gcloud

  1. 对于要创建的作业:

    gcloud run jobs create JOB_NAME --image IMAGE_URL --task-timeout TIMEOUT

    您需要进行如下替换

    • JOB_NAME 替换为作业的名称。
    • IMAGE_URL 替换为对容器映像的引用,例如 us-docker.pkg.dev/cloudrun/container/job:latest
    • TIMEOUT 替换为作业任务的最长时长,并指定时间和单位:例如 10m5s 为 10 分 5 秒。
  2. 对于要更新的作业:

    gcloud run jobs update JOB_NAME --task-timeout TIMEOUT

YAML

  1. 如果您要创建新的作业,请跳过此步骤。如果您要更新现有作业,请下载其 YAML 配置

    gcloud run jobs describe JOB_NAME --format export > job.yaml
  2. 更新 timeoutSeconds: 特性:

    apiVersion: run.googleapis.com/v1
    kind: Job
    metadata:
      name: JOB
    spec:
      template:
        spec:
          template:
            spec:
              containers:
              - image: IMAGE
              timeoutSeconds: TIMEOUT

    您需要进行如下替换:

    • JOB_NAME 替换为作业的名称。
    • IMAGE_URL 替换为对容器映像的引用,例如 us-docker.pkg.dev/cloudrun/container/job:latest
    • TIMEOUT 替换为作业任务的时长上限,并指定时间和单位。您只能将时间指定为整数值,以秒、分钟或小时为单位。例如,如需将时长设置为 10 分 5 秒,请指定 605s

    您还可以指定更多配置详情,例如环境变量或内存限制。

  3. 更新现有作业配置:

    gcloud run jobs replace job.yaml

Terraform

如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令

如需为 Cloud Run 作业指定任务超时,请使用 google_cloud_run_v2_job 资源并将以下代码段应用于 main.tf 文件:

resource "google_cloud_run_v2_job" "default" {
  name     = "cloud-run-job-timeout"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    template {
      timeout = "3.500s"

      containers {
        image = "us-docker.pkg.dev/cloudrun/container/job:latest"
      }
    }
  }
}

查看任务超时设置

如需查看 Cloud Run 作业的当前任务超时设置,请执行以下操作:

控制台

  1. 在 Google Cloud 控制台中,进入 Cloud Run 作业页面:

    转到 Cloud Run 作业

  2. 点击相关作业以打开作业详情页面。

  3. 点击配置标签页。

  4. 在配置详细信息中找到任务超时设置。

gcloud

  1. 使用以下命令:

    gcloud run jobs describe JOB_NAME
  2. 在返回的配置中找到任务超时设置。

# Copyright 2020 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

source "https://rubygems.org"

gem "functions_framework", "~> 1.4"