创建和配置 Cron 作业

您可以使用 Cloud Scheduler 设置工作单元(被称为“Cron 作业”)日程安排,这些工作单元按某些周期性时间表(也称为“作业间隔”或“频率”)发送到目标。您可以使用 GCP Console 或 gcloud 命令行工具创建这些作业。

任何时间都只能运行一个作业实例。另请注意,Cloud Scheduler 会提供“至少一次”提交;也就是说,如果安排了作业,Cloud Scheduler 至少会发送一次作业请求。在极少数情况下,可能会请求同一作业的多个实例。因此,您的请求处理程序应该具有幂等性,并且您的代码应确保在发生这种情况时不会产生任何有害的副作用。

创建作业

要创建作业,您可以使用控制台或 gcloud 命令行。点击相应标签:

Console

  1. 访问 Cloud Scheduler 控制台页面。

    Cloud Scheduler

  2. 点击创建作业

    屏幕截图

  3. 为作业命名。名称在项目中必须是唯一的。请注意,删除项目关联的作业后,可以在其中重新使用作业名称。

  4. 视需要为作业提供简要说明,例如介绍作业作用的提醒。此说明显示在控制台中作业名称的旁边。

  5. 使用配置字符串指定作业运行的频率或作业间隔。例如,字符串 0 */3 * * * 每 3 小时运行一次作业。您在此处提供的字符串可以是任何与 crontab 兼容的字符串。熟悉旧版 App Engine cron 格式的开发人员也可以使用 App Engine Cron 格式

    有关更多信息,请参阅配置作业时间表

  6. 从下拉列表中,选择要用于作业频率的时区。

  7. 指定目标:

  8. 点击创建以保存作业。该作业现在将以指定频率运行。

Gcloud

使用 gcloud 命令行创建作业时,可以针对每种目标类型使用不同的命令。对于示例命令行,请点击下面的目标链接:

Pub/Sub 目标

如果您选择 Pub/Sub 目标,

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

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

Cloud Scheduler 将作为 Google API 服务帐号向此主题发布消息。请注意,Pub/Sub 目标配置不提供设置重试的选项,因为 Pub/Sub 具有自己的重试机制和政策。

App Engine 目标

如果选择 App Engine HTTP 目标,则必须使用与当前项目关联的 App Engine 应用。如果要在当前项目之外使用其他 App Engine 应用,请选择 HTTP 而不是 App Engine HTTP 作为目标。

将表单设置如下:

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

  2. 指定将运行 Cloud Scheduler 作业处理程序的 App Engine 的名称。如果省略此选项,则使用 default 服务。如果要进行设置,可以在 Google Cloud Platform Console 中找到服务名称。

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

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

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

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

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

HTTP 目标

如果选择 HTTP 目标,

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

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

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

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

Pub/Sub 目标

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

语法

gcloud beta scheduler jobs create pubsub JOB --schedule=SCHEDULE --topic=TOPIC (--message-body=MESSAGE_BODY | --message-body-from-file=MESSAGE_BODY_FROM_FILE) [optional flags]

要在命令行中使用 Pub/Sub 目标,请执行以下操作:

  1. 对于 JOB,指定作业名称。名称在项目中必须是唯一的。请注意,即使删除项目关联的作业后,您也不可在其中重新使用作业名称。

  2. 指定作业要按怎样的时间表(也称为频率或作业间隔)运行,例如“每3小时”。您在此处提供的字符串可以是任何与 crontab 兼容的字符串。熟悉旧版 App Engine cron 的开发人员也可以使用 App Engine Cron 格式

    有关更多信息,请参阅配置作业时间表

  3. 指定作业将要发布到的主题的名称。

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

  5. 您还可使用其他可选参数,例如时区、属性、说明和其他参数,这些参数在 gcloud命令行参考中有相关介绍

请注意,Pub/Sub 目标配置不提供设置重试的选项,因为 Pub/Sub 具有自己的重试机制和政策。

示例命令行:

    gcloud beta scheduler jobs create pubsub myjob --schedule "0 */3 * * *" --topic cron-topic --message-body "Hello"

App Engine 目标

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

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

语法

gcloud beta scheduler jobs create app-engine JOB --schedule=SCHEDULE [optional flags]

要使用 App Engine HTTP target,请执行以下操作:

  1. 对于 JOB,指定作业名称。名称在项目中必须是唯一的。请注意,即使删除项目关联的作业后,您也不可在其中重新使用作业名称。

  2. 指定作业要按怎样的时间表(也称为频率或作业间隔)运行,例如“每3小时”。您在此处提供的字符串可以是任何与 crontab 兼容的字符串。熟悉旧版 App Engine cron 的开发人员也可以使用 App Engine Cron 格式

    有关更多信息,请参阅配置作业时间表

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

  4. 指定将运行 Cloud Scheduler 作业处理程序的 App Engine 的名称。如果省略此选项,则使用 default 服务。如果要进行设置,可以在 Google Cloud Platform Console 中找到服务名称。

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

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

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

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

  9. 视需要设置重试值,指定发生故障时按怎样的方式重试 App Engine 作业。在大多数情况下,默认值就足够了。如需了解详情,请参阅 gcloud 命令行参考

  10. 您还可使用其他可选参数,例如时区、说明和其他参数,这些参数在 gcloud命令行参考中有相关介绍

示例命令行:

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

HTTP 目标

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

语法

gcloud scheduler jobs create http JOB --schedule=SCHEDULE --uri=URI [optional flags]

要使用 HTTP target,请执行以下操作:

  1. 对于 JOB,指定作业名称。名称在项目中必须是唯一的。请注意,即使删除项目关联的作业后,您也不可在其中重新使用作业名称。

  2. 指定作业要按怎样的时间表(也称为频率或作业间隔)运行,例如“每3小时”。您在此处提供的字符串可以是任何与 crontab 兼容的字符串。熟悉旧版 App Engine cron 的开发人员也可以使用 App Engine Cron 格式

    有关更多信息,请参阅配置作业时间表

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

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

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

  6. 视需要设置重试值,指定发生故障时按怎样的方式重试 App Engine 作业。在大多数情况下,默认值就足够了。如需了解详情,请参阅 gcloud 命令行参考

  7. 您还可使用其他可选参数,例如时区、说明和其他参数,这些参数在 gcloud命令行参考中有相关介绍

示例命令行:

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

删除作业

要删除任务,请执行以下操作:

Console

  1. 访问 Cloud Scheduler 控制台页面。

    Cloud Scheduler

  2. 选择要删除的作业。

  3. 点击删除作业

Gcloud

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

  2. 调用以下命令:

    gcloud scheduler jobs delete [my-job]
    

    [my-job] 替换为要删除的作业的名称。

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Cloud Scheduler 文档