原文是google缓存:
http://webcache.googleusercontent.com/search?q=cache:MD_FP-G6RI8J:sae.sina.com.cn/%3Fm%3Ddevcenter%26catId%3D26%26content_id%3D70+&cd=2&hl=zh-CN&ct=clnk&gl=cn

服务概要

Cron服务是SAE为开发者提供的分布式定时服务,用来定时触发开发者的特定动作,满足比如定时计算排行榜等需求。Cron的设置是通过App的config.yaml来实现的,只要用户在App目录下的config.yaml里按照我们的提供的语法格式进行配置,部署后就能生效。Cron的执行是以HTTP方式触发的,触发后真正执行的是用户在App中的PHP代码。Cron服务是分布式环境部署的,具有高可靠性,多点之间相互隔离且同时触发,并且通过分布式锁进行选举并最终由一个健康节点执行。

特别注意:

  • Cron的任务执行因为是以HTTP方式(GET),所以运行时间有上限,不得超过300秒;如果用户有超过300秒的任务需要定时触发,可以将其分解成多个cron,或者将任务放入TaskQueue或者DeferredJob来异步的执行。
  • Cron的任务执行存在一定的时间误差,最大不超过10秒。
  • Cron不分App版本,只对默认版本生效,当切换代码默认版本时cron会重新配置,切换成当前默认版本下的cron配置。
  • 每个App最多32条cron
  • Cron任务的间隔的最小时间衡量单元是分钟。
  • Cron任务里有两类:每隔一段时间执行和特定时间执行;其中每隔一段时间执行的任务又分为随机偏移执行的任务和指定偏移执行的任务,这两种任务对SAE平台的消耗不一样,所以指定偏移的Cron-offset的资源消耗费用要比随机偏移的Cron-nooffset的资源消耗费用高。
  • Cron支持设定时间区间,比如只在上午10点到下午5点间运行,或者只在1月24日至3月16日运行。
  • 多个cron的url不能完全相同,如果多个cron中使用了相同的url,后面的cron会覆盖前面的cron。一般添加无用的参数如"&cron=1"对相同的url加以区分可以避免覆盖。
  • 普通应用cron的并发限制为10。同一时间最多只能有10个cron任务执行,多出的任务将不能被执行。

应用场景

Cron服务主要提供两类的定时需求:

A、每隔一定时间执行,如每隔2个小时执行1次。

B、在某个特定时间点执行,如每周二晚上9:10执行。

针对A应用场景,Cron提供偏移offset功能,也就是用户可以显式指定偏移时间,否则,默认针对间隔时间做随机偏移。

Cron服务支持http basic auth,用户可以设置用户名和密码来控制访问。

服务限制与配额

SAE设置服务限制和配额的目的是为了防止个别用户攻击和滥用,从而在公有云计算平台上保证绝大多数开发者的正常使用.

1、服务限制和配额设定是在门户网站新浪自身长期运维的基础上经过严格计算得出的,所以正常使用一般不会出现问题。经过SAE    实际统计,99%的应用不会受到任何影响

2、当您发现您的某项服务超过限制或者超配时,请先阅读相关文档确认限制和配额的具体数值,再检查自己的程序是否存在使用不    当的情况,如果仍然解决不了,可以和SAE官方联系,saemail@sina.cn

服务限制

单App最大条目 32
单次最大执行时长 300秒

分钟配额

服务 请求数 cpu时间 流入带宽 流出带宽
Cron/offset 50 50s 1MB 1MB
Cron/nooffset 200 60s 5MB 5MB

备注和说明

限制

Cron的任务执行存在一定的时间误差,最大不超过10秒。

    每个App最多32条cron

    Cron任务的间隔的最小时间衡量单元是分钟

cron syatax

(descripted by EBNF, started by conf)

USERNAME = [a-zA-Z0-9]+

PASSWORD = [a-zA-Z0-9]+

INT = 0|([1-9]+[0-9]*)

STRING = [^\n]*

ORDINAL = $INT

MON = 'Monday' | 'monday' | 'Mon' | 'MON'

TUE = 'Tuesday' | 'tuesday' | 'Tue' | 'TUE'

WED = 'Wednesday' | 'wednesday' | 'Wed' | 'WED'

THU = 'Thursday' | 'thursday' | 'Thu' | 'THU'

FRI = 'Friday' | 'friday' | 'Fri' | 'FRI'

SAT = 'Saturday' | 'saturday' | 'Sat' | 'SAT'

SUN = 'Sunday' | 'sunday' | 'Sun' | 'SUN'

DAYS = MON | TUE | WED | THU | FRI | SAT | SUN | 'day' | 'days'

JAN = 'January' | 'january' | 'Jan' | 'JAN'

FEB = 'February' | 'february' | 'Feb' | 'FEB'

MAR = 'March' | 'march' | 'Mar' | 'MAR'

APR = 'April' | 'april' | 'Apr' | 'APR'

MAY = 'May' | 'may' | 'MAY'

JUN = 'June' | 'june' | 'Jun' | 'JUN'

JUL = 'July' | 'july' | 'Jul' | 'JUL'

AUG = 'August' | 'argust' | 'Aug' | 'AUG'

SEP = 'September' | 'september' | 'Sep' | 'SEP'

OCT = 'October' | 'october' | 'Oct' | 'OCT'

NOV = 'November' | 'november' | 'Nov' | 'NOV'

DEC = 'Decemer' | 'december' | 'Dec' | 'DEC'

MONTHS = JAN | FEB | MAR | APR | MAY |JUN | JUL | AUG | SEP | OCT | NOV | DEC | 'month'

MIN = 'min' | 'mins' | 'minute' | 'minutes'

HOUR = 'hour' | 'hours'

DAYPOINT = [1970-2038].[1-12].[1-31]

TIME = [0-23]:[0-59]

DATETIME = [0-9]{12}

timezone_expreesion = 'Beijing' | 'NewYork' | 'London' | 'Sydney' | 'Moscow' | 'Berlin'

| 'Tokyo' | 'LosAngeles' | 'BJ' | 'NY' | 'LON' | 'SYD' | 'MOS' | 'LA'

timer_expression=

  'every'  INT  MIN  (  

                       (, 'from'  DAYPOINT  TIME)  ('to'  DAYPOINT  TIME)?
                        |
                       (, 'from'  [DAYPOINT | TIME])  ('to'  [DAYPOINT | TIME])?
                     )
  |
   every'  INT  HOUR (,'offset' INT MIN)? (
                                            (,'from'  DAYPOINT  TIME)  ('to'  
  DAYPOINT  TIME)?
                                            |
                                            (, 'from'  [DAYPOINT | TIME])  ('to'  
  [DAYPOINT | TIME])?
                                             )
  |
  ['every'  |  ORDINAL]  DAYS  'of'  MONTHS  TIME  (
                                                    (,'from'  DAYPOINT  TIME)  ('to'  
  DAYPOINT  TIME)?
                                                    |        

                                                    (,'from'  DAYPOINT )  ('to'  DAYPOINT)?
|
crontab unix syntax

  item=

  '-'

  (description: STRING)?

  url: URL

  schedule: timer_expression

  (timezone: timezone_expression)?

  (login: USERNAME@PASSWORD)?

  (times: INT)?

  conf = item{1,32}

crontab unix syntax

cron_unix的语法形式如下:

    *     *     *   *    *        command to be executed
    -     -     -   -    -
    |     |     |   |    |
    |     |     |   |    +----- day of week (0 - 6) (Sunday=0)
    |     |     |   +------- month (1 - 12)
    |     |     +--------- day of        month (1 - 31)
    |     +----------- hour (0 - 23)
    +------------- min (0 - 59)
    如果某一项设置了多个参数,可以用“,”隔开,例如3,4,5,6这样。
    如果是几个连续的数字构成的参数,可以用用“-”吧首尾相连,例如3-6。
    详细参见:crontab使用 http://adminschoice.com/crontab-quick-reference

第三方工具

第三方开发的生成Cron的小工具 http://saetools.sinaapp.com/cron.html

 

PHP调用方式

使用指南

例子:

    appname: saetest
    appversion: 1    Cron使用类自然语言描述,学习成本很低,基本靠几个例子即可熟悉学会。

Cron最新支持unix的crontab语法,可以同时在分钟、小时、天、月和星期位置上进行各种组合设置,时间设置的精度为分钟,方便习 惯于写crontab的系统管理员使用。

增加Cron

编辑saetest/1/config.yaml,增加cron段,config.yaml示例如下:

name: saetest
version: 1
- description: cron test
  url: mycron/test.php
  schedule: $2 day of october 19:00
  timezone: Beijing
- description: another cron test
  url: mycron/another_test.php
  schedule: every 10 mins
  timezone: Beijing    上面的示例描述了两个定时任务:每年10月2日19点执行mycron/test.php;每隔10分钟执行mycron/another_test.php

删除cron

编辑saetest/1/config.yaml,删除某个cron段,config.yaml示例如下:

name: saetest
version: 1
- description: cron test
  url: mycron/test.php
  schedule: $2 day of october 19:00
  timezone: Beijing    上面的示例比上面的例子删除了another cron test

config.yaml示例如下:

    name: saetest
    version: 1    该示例则不包含任何cron任务

语法字段含义

    - description:
    不是必填,默认为空;
 
    - url:
    是cron 需要执行的代码的相对路径,如myapp/1/code/test.php,url则写为test.php
 
    - schedule:
    cron的描述字段,$符号表示第几,$2 表示第二,$13 表示第十三
 
    - timezone:
    不是必填,默认为北京时间;目前时区支持:北京时间、纽约时间、伦敦时间、悉尼时间、莫斯科时间、柏林时间、东京时间和洛杉矶 时间
 
    - login:
    http basic auth设置,不是必填,默认为无特殊权限;kobe@123456,则表示访问用户和密码为kobe和123456(具体页面的权限访问 控制请参考appconfig)
 
    - times:
    表示执行的次数,默认是循环执行(INT_MAX),如果该值大于零,则每执行一次减一,直到等于零,如3则表示执行3次

Cron SAE语法例子

- description: cron test
  url: mycron/test.php
  schedule: every 5 mins
  login: kobe@123456    每隔5分钟运行mycron/test.php,基于中国北京时间,http访问权限为用户名kobe、密码123456

- description: cron test
  url: mycron/test.php
  schedule: every 5 mins, offset 49    每隔5分钟(偏移49秒,也就是第5分钟的49秒,第10分钟的49秒,第15分钟的49秒。。。),运行mycron/test.php,基于中国北京时间

- description: cron test
  url: mycron/test.php
  schedule: every 1 hour, offset 0    每整点运行mycron/test.php(9点整运行,10点整运行,11点整运行,12点整运行。。。),基于中国北京时间

- description: cron test
  url: mycron/test.php
  times: 100
  schedule: every 1 hour    每隔1小时运行mycron/test.php,随机偏移时间,如(9:17:29运行,10:17:29运行,11:17:29运行,12:17:29运行。。。),基于中国北 京时间,一共运行100次

- description: cron test
  url: mycron/test.php
  schedule: every 1 hour, offset 15
  login: kobe@123456    每小时一刻运行mycron/test.php,(9:15:00运行,10:15:00运行,11:15:00运行,12:15:00运行。。。),基于北京时间,http访问权限 为用户名kobe、密码123456

- description: cron test
  url: mycron/test.php
  schedule: every 3 hour
  login: kobe@123456    每隔3小时运行mycron/test.php,随机偏移时间,如9:36:56执行、12:36:56执行、15:36:56执行,基于北京时间,http访问权限 为用 户名kobe、密码123456

- description: cron test
  url: mycron/test.php
  schedule: every day of month 00:20    每天的零点20分执行test.php

- description: cron test
  url: mycron/test.php
  schedule: every monday of march 11:00
  timezone: Beijing    每年3月的每个周一的11:00运行mycron/test.php,基于北京时间

- description: cron test
  url: mycron/test.php
  schedule: every sunday of month 20:10
  timezone: LosAngeles    每月的每个周日的20:10运行mycron/test.php,基于美国洛杉矶时间

- description: cron test
  url: mycron/test.php
  schedule: $2 day of month 19:00
  timezone: Moscow   每月的2号19:00运行mycron/test.php,基于俄罗斯莫斯科时间

- url: index.php
  description: cron.php
  schedule: every 1 hour,offset 32, from 8:00 to 12:00
  times: 2147483647
  timezone: Beijing    每天八点到十二点间每隔一个小时(偏移32分钟)运行一次cron.php

- url: index.php
  description: send.php
  schedule: every day of march 15:50, from 2011.3.2
  times: 2147483647
  timezone: Beijing    从2011.3.2日起三月份每天的15:50运行send.php

- url: index.php
  description: bill.php
  schedule: every 10 mins, from 2011.3.3 8:00 to 2011.3.9 8:00
  times: 2147483647
  timezone: Beijing    从2011.3.3日八点起,至2011.3.9日八点,每隔10分钟运行一次bill.php

 Cron unix crontab语法例子
 
- description: cron test
  url: mycron/test.php
  schedule: */5 * * * *
    每五分钟运行一次 mycron/test.php,基于北京时间
 
- description: cron test
  url: mycron/test.php
  schedule: 5 */2 * * *
每隔两小时运行一次mycron/test.php,基于北京时间。特别注意的 就是分钟位置上一定要制定一个数字,表示在多少分钟运行,如果 不指定,这是间隔一小时后,每分钟运行一次。
 
- description: cron test
  url: mycron/test.php
  schedule: 5 12 * * 4
每个周四的12:05运行一次mycron/test.php,基于北京时间。
 
- description: cron test
  url: mycron/test.php
  schedule: 5 12 4 * *
每个月4号的12:05运行一次mycron/test.php,基于北京时间。
 
- description: cron test
  url: mycron/test.php
  schedule: 5 12 */3 * 4
每隔三天的12:05或者是每隔星期四的12:05运行一次mycron/test.php,基于北京时间。
 
- description: cron test
  url: mycron/test.php
  schedule: 5-20 12-16,20 3,4 3-9 4
条件1:如果今天是今年3-9月中的某一天,并且今天是3、4号的某一天
    条件2:今天是星期四
    条件3:现在的时间小时上的数字(24小时制)是在12-16&&20中的某一个数字
    条件4:现在的时间分钟上的数字是5-20中的某一个数字
    if((条件1 || 条件2) && 条件3 && 条件4)  运行一次mycron/test.php,基于北京时间。

Java调用方式

  Java应用使用Cron的和方法以及配置文件语法和php是相同的(详情可参见Cron服务文档),唯一不同之处在于上传config.yaml的方式。因为Java应用在线只提供war包上传功能,所以上传config.yaml文件只能通过svn上传的方式来实现。
 

以应用名为javatest版本号为1的应用使用cron为例,只需将config.yaml文件加入应用对应版本的SVN路径下javatest/1/config.yaml(和war包路径相同),之后svn commit即可。需要注意的是,cron服务只对应用的默认版本有效。

 

Python调用方式

Cron的配置文件为 config.yaml ,Cron的执行状态可在应用的管理界面 服务管理>Cron 中查看。

·添加Cron:

编辑config.yaml文件中,增加cron段,例如:

name: crontest
version: 1
cron:
- description: cron_test
  url: /cron/make
  schedule: "*/5 * * * *"

上面的示例添加了一个cron任务,该任务每5分钟执行 http://crontest.sinaapp.com/cron/make 一次。

·删除cron:

删除config.yaml中对应的cron描述段即可就行。

·语法字段含义

·url

cron任务的url。例如 /relative/url/to/cron 。

·schedule

任务描述,也就是何时执行这个cron,支持unix crontab语法。例如:

# 每天0005分执行
"5 0 * * *"
# 每月1号的1415分执行
"15 14 1 * *"
# 每个工作日的晚上10点执行
"0 22 * * 1-5"
# 每分钟执行一次
"*/1 * * * *"

具体的语法规则可以参考man手册, man 5 crontab 。

·description

可选。任务的说明,默认为空。

·timezone

可选。默认为Beijing,目前支持:Beijing, NewYork, London, Sydney, Moscow, Berlin

·login

可选。http basic auth设置,格式: 用户名@密码

·times

可选。设置cron最大执行的次数,默认没有次数限制。

Note:

Cron使用GET方式请求URL。

Cron完整示例

每五分钟请求一次/backend/cron/update URL

Flask URL 处理程序:

importpylibmc
importdatetime

fromappstackimportapp

mc=pylibmc.Client(['localhost'])

@app.route('/backend/cron/update',methods=['GET','POST'])
defupdate():
    update_time =mc.get('update_time')
    mc.set("update_time",str(datetime.datetime.now()))

    returnupdate_time

config.yaml:

 name: appstack
 version: 4

 cron:
 - url: /backend/cron/update
    schedule: "*/5 * * * *"

sae crop 文档的更多相关文章

  1. 新浪sae对storage的文档进行读写操作

    有的人喜欢将一些数据写在服务器的文件里面,并不喜欢存在mysql里,但新浪sae却不支持对本地文件进行操作. 不过sae拓展了一个storage的服务,可以将一些静态文件放在上面.本文不介绍文件的上传 ...

  2. Web前端开发规范文档(google规范)

    (Xee:其实没什么规范约束,但是养成一种好习惯,何乐而不为?) 区分大小写 xhtml  区分大小写,xhtml要求 标签名 属性名 值都要小写,并且要有双引号和 标签闭合. css 元素名称以及i ...

  3. Web前端开发规范文档你需要知道的事--HTML、css、js、文档等需要规范内容

          规范目的 为提高团队协作效率,便于后台人员添加功能及前端后期优化维护,输出高质量的文档,特制订此文档.本规范文档一经确认,前端开发人员必须按本文档规范进行前台页面开发.本文档如有不对或者不 ...

  4. graphicsMagick 文档

    ImageMagick资料 ---------------------------------------------------------------------------- ImageMagi ...

  5. WEB前端开发规范文档(转)

    http://codeguide.bootcss.com/  编写灵活.稳定.高质量的 HTML 和 CSS 代码的规范上面的文档 再结合下面的规范: 无论是从技术角度还是开发视角,对于web前端开发 ...

  6. 网站开发进阶(三十八)Web前端开发规范文档你需要知道的事

    Web前端开发规范文档你需要知道的事 规范目的 为提高团队协作效率, 便于后台人员添加功能及前端后期优化维护, 输出高质量的文档, 特制订此文档. 本规范文档一经确认, 前端开发人员必须按本文档规范进 ...

  7. Web前端开发规范文档你需要知道的事

    Web前端开发规范文档你需要知道的事 规范目的 为提高团队协作效率, 便于后台人员添加功能及前端后期优化维护, 输出高质量的文档, 特制订此文档. 本规范文档一经确认, 前端开发人员必须按本文档规范进 ...

  8. Plupload上传插件中文帮助文档

    Plupload上传插件中文帮助文档 配置参数 实例化一个plupload对象时,也就是 new plupload.Uploader(),需要传入一个对象作为配置参数.后面内容中出现的plupload ...

  9. WEB前端开发规范文档[转]

    为新项目写的一份规范文档, 分享给大家. 我想前端开发过程中, 无论是团队开发, 还是单兵做站, 有一份开发文档做规范, 对开发工作都是很有益的. 本文档由本人编写, 部分意见来源于网络, 以此感谢, ...

随机推荐

  1. mysql 安装1

    Linux 安装mysql.tar.gz包(2012-09-28 19:25:06) 标签: it 分类: linux学习编 我用的mysql的版本的是:mysql--linux-i686-icc-g ...

  2. VS2010中编写宏添加作者信息与函数注释

    这里所说的宏是指通过一系列键盘组合键和可以插入自定义内容.下面介绍怎么编写一个自己的宏: 1.在Visual Studio 2010中按Alt+F11打开宏IDE: 2.打开后选择添加模块: 3.在弹 ...

  3. Gold Balanced Lineup(哈希表)

    Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10711   Accepted: 3182 Description Farm ...

  4. HDU 5416 CRB and Tree

    题目大意: T, T组测试数据 给你一个n有n个点,下标是从 1 开始的.这个是一棵树,然后下面是n-1条边, 每条边的信息是 s,e,w 代表 s-e的权值是w 然后是一个Q代表Q次询问. 每次询问 ...

  5. hdu 3062 2-sat入门题

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3062 #include <cstdio> #include <cmath> # ...

  6. hadoop 2.0 详细配置教程(转载)

    转载: http://www.cnblogs.com/scotoma/archive/2012/09/18/2689902.html 作者:杨鑫奇 PS:文章有部分参考资料来自网上,并经过实践后写出, ...

  7. Swift3.0 更新后出现比较运算符方法

    在将项目更新到swift3.0之后,在一些controller头部会出现 比较运算符的方法 // FIXME: comparison operators with optionals were rem ...

  8. Linux Epoll介绍和程序实例

    Linux Epoll介绍和程序实例 1. Epoll是何方神圣? Epoll但是当前在Linux下开发大规模并发网络程序的热门人选,Epoll 在Linux2.6内核中正式引入,和select类似, ...

  9. [AngularJS] Use ng-model-options to limit $digest

    Refer: http://toddmotto.com/super-fast-angular-ng-model-options-limit-digest-cycles/ Use: <input ...

  10. UML中的图

    用例图.类图.包图.顺序图.协作图.状态图.活动图.构件图.部署图等 1.用例图 显示多个外部参与者以及他们与系统提供的用例之间的连接.用例是系统中的一个可以描述参与者与系统之间交互作用功能单元.用例 ...