Cron
服务概述
Cron服务是SAE为开发者提供的分布式计划任务服务,用来定时触发开发者的特定动作,满足比如定时计算排行榜等需求。
Cron的执行是以HTTP方式触发的,触发后真正执行的是用户在应用的HTTP的回调函数。Cron服务是分布式环境部署的,具有高可靠性,多点之间相互隔离且同时触发,并且通过分布式锁进行选举并最终由一个健康节点执行。
Cron的应用场景主要是让用户可以在指定的时间执行一些计划任务。
- 每隔一定时间执行,如每隔2个小时执行1次。
- 在某个特定时间点执行,如每周二晚上9:10执行。
Cron服务支持HTTP基础认证,用户可以设置用户名和密码来进行控制访问。
开发者可以在应用的配置文件 config.yaml 中来添加Cron。Cron的执行状态可在应用的管理界面 服务管理>Cron 中查看。
服务限制
- Cron任务执行因为是以HTTP方式(GET),所以运行时间有上限,不得超过1800秒;如果用户有超过1800秒的任务需要定时触发,可以将其分解成多个Cron,或者将任务放入TaskQueue或者DeferredJob来异步的执行。
- Cron任务执行存在一定的时间误差,最大不超过10秒。
- Cron任务不分应用版本,只对默认版本生效,当切换代码默认版本时Cron会重新配置,切换成当前默认版本下的Cron配置。
- 每个应用最多32条Cron任务。
- Cron任务的间隔的最小时间衡量单元是分钟。
- Cron支持设定时间区间,比如只在上午10点到下午5点间运行,或者只在1月24日至3月16日运行。
- 多个Cron的url不能完全相同,如果多个Cron中使用了相同的url,后面的Cron会覆盖前面的Cron。开发者可以通过对url添加一些无用的参数如”&cron=1”来对相同的url加以区分。
- 普通应用Cron的并发限制为12。同一时间最多只能有12个Cron任务执行,多出的任务将不能被执行。
如何配置
-
添加Cron:
编辑config.yaml文件中,增加Cron段,例如:
上面的示例添加了一个Cron任务, 该任务每5分钟执行 http://crontest.sinaapp.com/cron/make 一次。
-
删除Cron:
删除config.yaml中对应的Cron描述段即可。
-
语法字段含义
-
url
Cron任务的url。例如 /relative/url/to/cron 。
-
schedule
任务描述,也就是何时执行这个Cron,支持unix crontab语法。例如:
unix Crontab的语法形式如下:
如果某一项设置了多个参数,可以用“,”隔开,例如3,4,5,6这样。 如果是几个连续的数字构成的参数,可以用“-”把首尾相连,例如3-6。
具体的语法规则可以参考man手册, man 5 crontab 。
-
description
可选。任务的说明,默认为空。
-
timezone
可选。默认为Beijing,目前支持:Beijing, NewYork, London, Sydney, Moscow, Berlin
-
login
可选。HTTP基础认证设置,格式: 用户名@密码
-
times
可选。设置cron最大执行的次数,默认没有次数限制。
-
注解
Cron使用HTTP GET方式请求URL