python cron_python,cron,gae,bae

  • Post author:
  • Post category:python


通过使用 App Engine Cron 服务,您可以配置在指定时间或按固定间隔执行的定期计划任务。这些任务通常称为 Cron 作业。这些 Cron 作业是由 App Engine Cron 服务自动触发的。例如,您可以每天使用该服务发送报告电子邮件,每 10 分钟更新一些缓存数据,或者每小时更新一些摘要信息。

Cron 作业将在一天中的给定时间使用 HTTP GET 请求调用网址。Cron 调用的网址具有与普通 HTTP 请求相同的限制和配额,包括请求时间限制。仅为默认应用程序版本运行 Cron 作业。

应用程序最多可以有 20 个计划任务。

关于 cron.yaml

cron.yaml 文件位于应用程序的根目录(与 app.yaml 在一起),用于配置 Python 应用程序的计划任务。以下是 cron.yaml 的示例文件:

cron:

– description: daily summary job

url: /tasks/summary

schedule: every 24 hours

– description: monday morning mailout

url: /mail/weekly

schedule: every monday 09:00

timezone: Australia/NSW

cron.yaml 的语法为 YAML 格式。有关该语法的详细信息,请参阅 YAML 网站。

cron.yaml 文件由若干作业定义组成。作业定义必须具有 url 和 schedule。您也可以视需要指定 description 和 timezone。此说明将在管理控制台和开发服务器的管理界面中提供。

url 字段指定应用程序中将由 Cron 服务调用的网址。有关详细信息,请参阅保护 Cron 网址的安全。计划字段的格式在计划格式中有更详细的介绍。

时区名称应为标准 zoneinfo 时区名称。如果未指定时区,计划将使用通用协调时间(UTC,也称为格林威治标准时间 GMT)。

计划格式

Cron 计划是使用类似英语的简单格式指定的。

下面是一些计划示例:

every 5 minutes

every 12 hours

2nd,third mon,wed,thu of march 17:00

every monday 09:00

1st monday of sep,oct,nov 17:00

every day 00:00

如果不需要在特定时间运行重复性作业,而是只需按固定间隔运行这些作业,请使用以下形式:every N (hours|mins|minutes),其中 N 是一个数字,hours 或 minutes 指定时间单位。可以将运行任务的最短间隔指定为 1 分钟。

默认情况下,间隔计划从完成上一作业后的下一间隔开始。如果希望每天按固定间隔启动作业而与完成上一作业的时间无关,请在间隔描述中添加单词 synchronized。例如:

every 2 hours synchronized

这会每天按 2 小时的间隔运行 12 次作业,从午夜开始。

如果要指定更具体的时间,您可以按以下方式指定计划:

(“every”|ordinal) (days) [“of” (monthspec)] (time)

括号仅用于说明目的,引号表示字面值。

其中:

ordinal 指定“1st”或“first”等(两种形式都可以)的逗号分隔列表

days 指定星期(如“mon”、“tuesday”,接受全称和缩写形式)的逗号分隔列表;“every day”相当于“every mon,tue,wed,thu,fri,sat,sun”

monthspec 指定月份名称(如“jan”、“march”、“sep”)的逗号分隔列表如果省略,则表示每个月。也就是说:“month”表示每个月,例如,“1,8,15,22 of month 09:00”。

time 指定一天中的时间,采用 24 小时制的 HH:MM 格式。

保护 Cron 网址安全

cron 处理程序只是一个在 app.yaml 中定义的普通处理程序。您可以通过将访问权限限制为仅限管理员帐户来防止用户访问计划任务使用的网址。计划任务可以访问仅限管理员的网址。您可以通过在 app.yaml 中将 login: admin 添加到处理程序配置来限制网址。

app.yaml 中的一个示例可能如下所示:

application: hello-cron

version: 1

runtime: python

api_version: 1

handlers:

– url: /report/weekly

script: reports.py

login: admin

注意:尽管 cron 作业可以使用以 login: admin 加以限制的网址路径,但不能使用以 login: required 加以限制的网址路径。

要测试 cron 作业,请以管理员身份登录,并在浏览器中访问处理程序的网址。

来自 Cron 服务的请求也将包含 HTTP 标头:

X-AppEngine-Cron: true

如果希望确保仅 cron 请求能够触发处理程序,您应该检查该标头。

Cron 和应用程序版本

Cron 请求始终发送到默认应用程序版本。

上传 Cron 作业

您可以使用 appcfg.py 上传 cron 作业和查看关于定义的 cron 作业的信息。当您使用 appcfg.py update 将应用程序上传到 App Engine 时,Cron 服务将根据 cron.yaml 的内容进行更新。您可以使用 appcfg.py update_cron 只更新 cron 配置,而无需上传应用程序的其余部分。

要删除所有 cron 作业,请将 cron.yaml 文件更改为只包含以下内容:

cron:

您可以使用 appcfg.py cron_info 命令显示 cron 作业的解析版本,包括作业将运行的次数。

如果希望 appcfg.py cron_info 正确处理您指定的时区,请安装 pytz 包。

管理控制台对 Cron 的支持

通过使用管理控制台,您可以查看 Cron 作业的状态。请从侧面菜单中选择“Cron 作业”链接以查看作业状态,包括上次运行作业的时间以及作业结果。

也可以从管理控制台菜单中选择“管理日志”页以查看添加或删除 Cron 作业的时间。

开发服务器中的 Cron 支持

使用 Python SDK 时,您可以通过开发应用程序服务器提供的管理界面查看 /_ah/admin/cron 中的 cron 作业。

开发服务器不会自动运行您的 cron 作业。您可以使用本地桌面的 cron 或计划任务接口通过 curl 或类似工具来触发作业的网址。



版权声明:本文为weixin_29763721原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。