管理 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 Run functions
  • Cloud Run(通过 run.app 网址,而不是通过自定义网域)

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

如需详细了解如何通过限制入站流量来保护目标,请参阅限制入站流量(适用于 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:您必须使用与当前项目关联的 App Engine 应用和区域。

  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 目标作业,请参阅对 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 地址范围的请求。

您可以使用 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 参数发送。如需查看执行此操作的示例,请参阅快速入门

如需了解其他参数,请参阅 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 替换为要删除的作业的名称。