管理 Cron 作业

Pub/Sub 目标

如果您选择 Pub/Sub 目标类型:

  1. 指定作业将要发布到的主题的名称。这是您已在项目中设置的 Pub/Sub 主题。

  2. 指定要发送到主题的消息。此请求会作为 data 参数包含在 Pub/Sub 消息中。如需查看执行此操作的示例,请参阅快速入门

  3. 添加所需的任何消息属性。

  4. 使用 Configure optional settings 部分设置任何其他配置。

Cloud Scheduler 将作为 Google API 服务账号向此主题发布消息。

App Engine HTTP 目标

如果您选择 App Engine HTTP 目标类型,则必须使用与当前项目关联的 App Engine 应用和区域。如果 您想在当前应用之外使用一些其他的 App Engine 应用, 项目中,请选择 HTTP(而非 App Engine HTTP)作为目标。通过 目标防火墙规则必须允许来自 0.1.0.2/32 IP 范围的请求。

将表单设置如下:

  1. 目标类型列表中,选择 App Engine HTTP

  2. 指定运行 用于处理 Cloud Scheduler 作业的处理程序。如果省略,default 服务。如果您想进行设置,可以在以下位置找到服务名称: Google Cloud 控制台

  3. 视需要指定版本。如果未设置此选项,则使用当前正在使用的版本。您可以在 Google Cloud 控制台中找到可用的版本。

  4. 视需要指定实例。如果未设置,任何可用实例 。您可以在 Google Cloud 控制台中找到可用的版本。

  5. 指定作业将使用的 App Engine 端点的相对网址 会联系。如果使用默认值 /,则作业将使用 PROJECT-ID.appspot.com,其中 PROJECT-ID 是您当前的项目 ID。

  6. 设置作业执行时要使用的 HTTP 方法。默认为 POST

  7. 向请求添加所需的标头。

  8. (可选)指定要发送到目标的正文数据。当选择 POSTPUT HTTP 方法时,此数据将在请求正文中以字节的形式发送。

目标 App Engine 端点必须位于同一项目中,并且可以通过将 app.yaml 文件中的 handlers 元素设置为 login: admin 进行保护。

HTTP 目标

如果您选择 HTTP 目标类型:

  1. 指定作业将联系的端点的完全限定网址。

  2. 指定 HTTP 方法。默认为 POST

  3. 视需要指定要发送到目标的数据。当选择 POSTPUT HTTP 方法时,此数据将在请求正文中以字节的形式发送。

  4. 添加所需的任何标头。

  5. 如需创建需要身份验证的 HTTP 目标作业,请参阅 对 HTTP 目标使用身份验证

目标 HTTP 端点必须可公开访问。

您可以使用 Cloud Scheduler 设置预定的工作单元, Cron 作业,它们会发送到某些上的目标 周期性时间表 称为作业间隔或频率

任何时间都只能运行一个作业实例。极少使用 同一作业的多个实例可能会 请求。因此,您的请求处理程序应具有幂等性,并且您的代码应确保在发生这种情况时不会产生任何有害的副作用。

Cloud Scheduler 适用于重复作业。如果您需要运行 可以考虑使用 Cloud Tasks 提前 30 天完成任务。

准备工作

确保您已为以下应用设置环境: Cloud Scheduler

选择目标类型

Cloud Scheduler 可以调用以下类型的目标:

调用受限于内部入站流量的目标服务

Cloud Scheduler 可以在内部调用以下服务:

  • Cloud Run 函数
  • Cloud Run(在 run.app 网址上,而不是在自定义网域上)

如需在内部调用这些目标,目标必须在 Google Cloud 项目或 VPC Service Controls 边界作为 Cloud Scheduler 作业。

如需详细了解如何通过限制入站流量来保护目标,请参阅限制入站流量(适用于 Cloud Run)和配置网络设置(适用于 Cloud Run 函数)。

创建作业

您可以使用 Google Cloud 控制台或 Google Cloud CLI 创建作业。

控制台

  1. 在 Google Cloud 控制台中,转到 Cloud Scheduler 页面。

    转到 Cloud Scheduler

  2. 点击创建作业

  3. 名称字段中,为作业提供一个名称,该名称对于 项目。

    删除项目关联的作业后,您可以在其中重新使用作业名称。

  4. 区域列表中,选择一个区域。

    如果您使用的是 App Engine HTTP 目标,则必须选择与 App Engine 应用相同的区域。如需了解详情,请参阅按目标支持的区域

  5. (可选)提供任务的简短说明,例如 作业的用途。

    此说明显示在控制台中的作业名称旁边。

  6. 使用配置字符串指定作业运行的频率

    例如,字符串 0 1 * * 0 每周凌晨 1 点运行一次作业 。您在此处提供的字符串可以是任何与 unix-cron 兼容的字符串。如需了解详情,请参阅配置 Cron 作业时间表

  7. 时区列表中,选择要用于作业的时区 时间表。

  8. 点击继续

  9. 指定目标类型

    • HTTP

    • Pub/Sub:您必须指定已在项目中设置且作业将发布到的 Pub/Sub 主题的名称。

    • App Engine HTTP: 您必须使用与 当前项目。

  10. 点击继续

  11. (可选)要配置任何重试行为,请点击 配置可选设置。如需指定时长,请使用十进制非负整数序列,并包含以下单位后缀:

    • h - 小时
    • m - 分钟
    • s - 秒
    • ms - 毫秒
    • us - 微秒
    • ns - 纳秒

    不允许使用负值和分数值。Max retry duration 字段仅支持 hms 值。Min backoff durationMax backoff duration 都支持所有值。

  12. (可选)对于 HTTP 和 App Engine HTTP 目标,请配置 作业尝试的截止时间。如果请求处理程序没有通过此 则请求会被取消,且尝试会被标记为失败。 Cloud Scheduler 会根据重试配置重试执行该作业。

  13. 如需创建并保存作业,请点击创建

    该作业现在将以指定的频率运行。

gcloud

使用 gcloud CLI 创建作业时,您可以使用不同的 命令:

HTTP

您可以向任何 HTTP 或 HTTPS 端点发送请求。目标 HTTP 端点必须可公开访问。

gcloud scheduler jobs create http JOB \
    --location=LOCATION \
    --schedule=SCHEDULE \
    --uri=URI

替换以下内容:

  • JOB:作业名称,必须在项目中保持唯一性。请注意,即使删除项目关联的作业后,您也不可在其中重新使用作业名称。

  • LOCATION:作业运行的位置。

  • SCHEDULE:作业的运行频率或作业间隔,例如 every 3 hours。您在此处提供的字符串可以是任何与 unix-cron 兼容的字符串。虽然我们不再建议使用旧版 App Engine cron 语法,但现有作业仍受其支持。

    如需了解详情,请参阅配置 Cron 作业时间表

  • URI:端点的完全限定 URI 该作业将联系到哪个联系人。

如需了解其他参数,请参阅 gcloud 命令行参考

  • (可选)指定 HTTP 方法。默认为 POST

  • 视需要指定要发送到目标的数据。这些数据 当 POSTPUT 时,在请求正文中以字节形式发送 已选择 HTTP 方法。

  • (可选)设置重试值,指定 App Engine 的 在出现故障时重试作业。在大多数情况下 就足够了

  • 如需创建需要进行身份验证的 HTTP Target 作业,请参阅 使用具有 HTTP 目标的身份验证

示例

gcloud scheduler jobs create http my-http-job \
    --schedule "0 1 * * 0" \
    --uri "http://myproject/my-url.com" \
    --http-method GET

Pub/Sub

您必须使用已在项目中设置的 Pub/Sub 主题。Cloud Scheduler 将消息发布到 Google API 服务账号。

gcloud scheduler jobs create pubsub JOB \
    --location=LOCATION \
    --schedule=SCHEDULE \
    --topic=TOPIC

替换以下内容:

  • JOB:作业名称,必须在项目中保持唯一性。请注意,即使删除项目关联的作业后,您也不可在其中重新使用作业名称。

  • LOCATION:作业运行的位置。

  • SCHEDULE:作业的运行频率或作业间隔,例如 every 3 hours。您在此处提供的字符串可以是任何与 unix-cron 兼容的字符串。虽然我们不再建议使用旧版 App Engine cron 语法,但现有作业仍受其支持。

    如需了解详情,请参阅 配置 Cron 作业时间表

  • TOPIC:作业将发布到的主题的名称。使用 --message-body--message-body-from-file 标志指定要发送到主题的消息。这作为 Pub/Sub 消息中的 data 参数发送。如需查看执行此操作的示例,请参阅快速入门

有关其他参数的说明,请参阅 gcloud 命令行参考

示例

gcloud scheduler jobs create pubsub myjob \
    --schedule "0 1 * * 0" \
    --topic cron-topic \
    --message-body "Hello"

App Engine HTTP

App Engine HTTP 目标仅适用于 App Engine 与当前项目关联的应用。如果要在当前项目之外使用其他 App Engine 应用,请选择 HTTP 而不是 App Engine HTTP 作为目标。目标防火墙规则 允许来自 0.1.0.2/32 IP 范围的请求。

您可以使用 login: admin 对 App Engine 端点进行保护, app.yaml 文件中的 handlers 元素。

gcloud scheduler jobs create app-engine \
    --JOB=JOB \
    --location=LOCATION \
    --schedule=SCHEDULE

替换以下内容:

  • JOB:作业名称,必须在项目中保持唯一性。请注意,即使删除项目关联的作业后,您也不可在其中重新使用作业名称。

  • LOCATION:作业的运行位置。 此位置必须与 App Engine 应用的位置相同。

  • SCHEDULE:作业的运行频率或作业间隔,例如 every 3 hours。您提供的字符串 此处可以是任意值 unix-cron 兼容字符串。虽然我们不再建议使用旧版 App Engine cron 语法,但现有作业仍受其支持。

    如需了解详情,请参阅 配置 Cron 作业时间表

有关其他参数的说明,请参阅 gcloud 命令行参考

  • 指定作业将联系的 App Engine 端点的相对网址。如果您使用默认值 /,则作业将使用 PROJECT-ID.appspot.com,其中 PROJECT-ID 是您当前的项目 ID。

  • 指定正在运行的 App Engine 服务的名称 Cloud Scheduler 作业的处理程序。如果省略此选项,则使用 default 服务。如果您想进行设置,可以找到 (位于 Google Cloud 控制台中)。

  • (可选)设置作业执行时要使用的 HTTP 方法。 默认值为 POST

  • 视需要指定版本。如果未设置此政策,当前投放的 版本。您可以在 Google Cloud 控制台

  • 视需要指定实例。如果未设置此选项,则可以使用任何可用实例。您可以在 Google Cloud 控制台中找到可用的版本。

  • 视需要指定要发送到目标的数据。当选择 POSTPUT HTTP 方法时,此数据将在请求正文中以字节的形式发送。

  • 视需要设置重试值,指定发生故障时按怎样的方式重试 App Engine 作业。在大多数情况下,默认值为 。

示例

gcloud scheduler jobs create app-engine my-appengine-job \
    --schedule "0 1 * * 0" \
    --relative-url "/cron-handler"

修改作业

您可以修改作业的配置。

控制台

  1. 在 Google Cloud 控制台中,转到 Cloud Scheduler 页面。

    转到 Cloud Scheduler

  2. 选择要修改的作业。

  3. 点击修改

  4. 按照相应步骤定义时间表,配置执行 在创建作业时配置可选设置。

gcloud

使用 gcloud CLI 修改作业时,您可以使用不同的 命令:

HTTP

您可以向任何 HTTP 或 HTTPS 端点发送请求。目标 HTTP 端点必须可公开访问。

gcloud scheduler jobs update http JOB \
    --location=LOCATION \
    --schedule=SCHEDULE \
    --uri=URI

替换以下内容:

  • JOB:作业名称,在 项目。请注意,即使您正在执行下列操作, 关联的作业。

  • LOCATION:作业的运行位置。如果您未指定位置,gcloud CLI 将使用您的默认位置。如果您要修改的作业位于其他位置,除了 NAME 之外,您还必须指定相应位置,以便系统识别您的作业。您无法更新作业位置。

  • SCHEDULE:作业的运行频率或作业间隔,例如 every 3 hours。您在此处提供的字符串可以是任何与 unix-cron 兼容的字符串。虽然我们不再建议使用旧版 App Engine cron 语法,但现有作业仍受其支持。

    如需了解详情,请参阅配置 Cron 作业时间表

  • URI:作业将联系的端点的完全限定 URI。

如需了解其他参数,请参阅 gcloud 命令行参考

示例

gcloud scheduler jobs update http my-http-job \
    --schedule "0 1 * * 0" \
    --uri "http://myproject/my-url.com" \
    --http-method GET

Pub/Sub

您必须使用已在项目中设置的 Pub/Sub 主题。Cloud Scheduler 将消息发布到 Google API 服务账号。

gcloud scheduler jobs update pubsub JOB \
    --location=LOCATION \
    --schedule=SCHEDULE \
    --topic=TOPIC

替换以下内容:

  • JOB:作业名称,在 项目。请注意,即使您正在执行下列操作, 关联的作业。

  • LOCATION:运行作业的位置。 如果您未指定位置,gcloud CLI 将使用您的默认位置。如果要修改的作业位于 您还必须指定地理位置以及 NAME,以便系统识别您的作业。您不能 更新工作地点。

  • SCHEDULE:频率或作业间隔,即达到该频率 例如 every 3 hours。您在此处提供的字符串可以是任何与 unix-cron 兼容的字符串。虽然我们不再推荐使用它,但旧版 App Engine Cron 语法 仍然支持现有作业

    如需了解详情,请参阅配置 Cron 作业时间表

  • TOPIC:作业所对应主题的名称 将要发布的内容使用 --message-body--message-body-from-file 标志 来指定要发送到主题的消息。这作为 Pub/Sub 消息中的 data 参数发送。举个例子, 详情,请参阅快速入门

如需了解其他参数,请参阅 gcloud 命令行参考

示例

gcloud scheduler jobs update pubsub myjob \
    --schedule "0 1 * * 0" \
    --topic cron-topic --message-body "Hello"

App Engine HTTP

App Engine HTTP 目标仅适用于与当前项目关联的 App Engine 应用。如果您想使用其他 在当前项目外的 App Engine 应用,选择 HTTP 作为 目标,而不是 App Engine HTTP

您可以使用 login: admin 对 App Engine 端点进行保护, app.yaml 文件中的 handlers 元素。

gcloud scheduler jobs update app-engine JOB \
    --location=LOCATION \
    --schedule=SCHEDULE

替换以下内容:

  • JOB:作业名称,必须在项目中保持唯一性。请注意,即使删除项目关联的作业后,您也不可在其中重新使用作业名称。

  • LOCATION:作业的运行位置(与目标 App Engine 应用的位置相同)。如果您未指定位置,gcloud CLI 将使用 您的默认位置。如果要修改的作业位于 您还必须指定地理位置以及 NAME,以便系统识别您的作业。您不能 更新工作地点。

  • SCHEDULE:作业的运行频率或作业间隔,例如 every 3 hours。您提供的字符串 此处可以是任意值 unix-cron 兼容字符串。虽然我们不再建议使用旧版 App Engine cron 语法,但现有作业仍受其支持。

    如需了解详情,请参阅配置 Cron 作业时间表

如需了解其他参数,请参阅 gcloud 命令行参考

示例

gcloud scheduler jobs update app-engine my-appengine-job \
    --schedule "0 1 * * 0" \
    --relative-url "/cron-handler"

暂停作业

您可以暂停作业的执行。

控制台

  1. 在 Google Cloud 控制台中,转到 Cloud Scheduler

    转到 Cloud Scheduler

  2. 选择要暂停的作业。

  3. 点击暂停

gcloud

  1. 在安装 gcloud CLI 的机器上打开终端窗口。

  2. 运行以下命令:

     gcloud scheduler jobs pause MY_JOB
    

    MY_JOB 替换为要暂停的作业的名称。

在作业暂停期间,您还可以对其进行修改。修改作业后,该作业会保持暂停状态,直到您恢复为止。

恢复作业

您可以恢复已暂停的作业的执行。

控制台

  1. 在 Google Cloud 控制台中,转到 Cloud Scheduler

    转到 Cloud Scheduler

  2. 选择要恢复的作业。

    作业必须已经暂停

  3. 点击恢复

gcloud

  1. 在安装 gcloud CLI 的机器上打开终端窗口。

  2. 运行以下命令:

     gcloud scheduler jobs resume MY_JOB
    

    MY_JOB 替换为要恢复的作业的名称。

删除作业

您可以删除作业。

控制台

  1. 在 Google Cloud 控制台中,转到 Cloud Scheduler

    转到 Cloud Scheduler

  2. 选择要删除的作业。

  3. 点击删除

gcloud

  1. 在安装 gcloud CLI 的机器上打开终端窗口。

  2. 运行以下命令:

     gcloud scheduler jobs delete MY_JOB
    

    MY_JOB 替换为要删除的作业的名称。