python,cron,gae,bae
http://developer.baidu.com/wiki/index.php?title=docs/cplat/rt/python/cron
简介
Cron(定时任务)是云环境为开发者提供的分布式环境下的定时任务功能,可以通过指定一个URL、时间表和相关参数来创建一个任务,系统将按照时间表的规则调用用户指定的URL。
管理
在百度开发者中心 登录后 进入“管理中心”,选择“管理”已托管在BAE上的应用,在“云环境(BAE)->服务管理->Cron(定时任务)”即可看到Cron服务的管理页面。创建定时任务并输入相关参数后即可在代码中直接调用,如下图:
图:Cron管理
创建相关选项说明
1. URL:
用户要执行的任务的地址。例如http://cron.duapp.com
2. 执行方法:
get 前面指定的URL 将被以get方式执行。 post 前面指定的URL 将被以post方式执行。
3. 相关参数:
只有在执行方法为post时有意义。并以post方式执行所携带的参数作为相关参数。例如 name=li&age=23&sex=f
4. 执行次数:
任务计划被执行的次数,如果输入0表示任务将永远被执行。
5. 时间表:
时间表用来定义任务执行的时间规则。符合Linux CronTab
* * * * * - - - - - | | | | | | | | | +----- day of week (0 - 6) (Sunday=0) | | | +------- month (1 - 12) | | +--------- day of month (1 - 31) | +----------- hour (0 - 23) +------------- min (0 - 59) f1 f2 f3 f4 f5 program *其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程式。 *当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程式,其余类推 *当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其余类推 *当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其余类推 *当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行,f2 为 a, b, c,... 时表示第 a, b, c...个小时要执行,其余类推 *week和day都有,则取交集。 例如:30 9 * * * 表示每天早上9点30分执行
参考网站 http://www.adminschoice.com/crontab-quick-reference
6. 回调URL:
每次任务被执行后,cron系统将以post请求方式回调该URL。用户可以在该URL的服务中获得2个参数,URL和reason。URL 指创建任务时的URL。reason 表示执行是否成功,有3种值:3成功,4失败,5超时。
限制
目前,Cron服务存在以下限制:
限制项 | 值 |
---|---|
单个开发者最大cron数 | 20 |
任务名称 | 名称不能为空,只能包含半角英文字母和数字,最大长度不能超过128个字符。且同一个用户所创建的Cron不能有同名 |
https://developers.google.com/appengine/docs/python/config/cron?hl=zh-cn
Cron 计划任务(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
加以限制的网址路径。
有关详细信息,请参阅 Python 应用程序配置:需要登录或管理员身份。
要测试 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 或类似工具来触发作业的网址。