创建和配置 Cron 作业

Pub/Sub 目标

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

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

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

  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 作业处理程序的 App Engine 服务的名称。如果省略,则使用 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 Functions
  • Cloud Run(在 run.app 网址上,而不是在自定义网域上)

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

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

创建作业

您可以使用 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:您必须使用 App Engine 应用以及与当前项目关联的区域。

  10. 点击继续

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

    • 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 目标作业,请参阅对 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 参数发送。如需查看执行此操作的示例,请参阅quickstart

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 地址范围的请求。

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

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。

  • 指定将运行 Cloud Scheduler 作业处理程序的 App Engine 服务的名称。如果省略,则使用 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 参数发送。如需查看执行此操作的示例,请参阅quickstart

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)作为目标。

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

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 替换为要删除的作业的名称。