原文是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. Integer Intervals(贪心)

    Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 12123   Accepted: 5129 Description An i ...

  2. 怒刷BZOJ记录(一)1001~1037

    我实在是太弱了...不滚粗只能刷BZOJ了...这里来记录每天刷了什么题吧. 2015-7-9 : 1001[BeiJing2006]狼抓兔子                 | 最大流练习(呃..其 ...

  3. codevs3945 完美拓印

    3945 完美拓印 codevs月赛 第一场 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题目描述 Description 小Q获得了一个神奇的印章,这个印章宽n ...

  4. 《A First Course in Probability》-chaper5-连续型随机变量-均匀随机变量

    在连续随机变量这部分,有一种特殊的随机变量X,对于X所有可能取值,P(X)都相等,我们称其为均匀随机变量. 基于均匀随机变量的定义,我们容易看到,其密度函数f(x)必然是一条平行于x轴的直线,因为这样 ...

  5. [转]sleep和wait的区别

    http://www.cnblogs.com/plmnko/archive/2010/10/15/1851854.html from:http://nneverwei.javaeye.com/blog ...

  6. SRM 508(2-1000pt)

    DIV2 1000pt 题意:给定整数n和r,求有多少个这样的数列,a1,a2...an,使得a1 + a2 +...+an = a1|a2|a3|...|an,(按位或).输出这样数列的个数mod  ...

  7. HDU 1247

    简单的字典树 - -,求一个单词是否由两个单词组成 #include<iostream> #include<cstring> #include<cstdio> us ...

  8. 【OSGi】OSGi生命周期

    1 生命周期管理 对于非模块化应用,生命周期将应用作为一个整体来操作: 而对于模块化应用,则可以以细粒度的方式来管理应用的某一个独立部分. OSGi生命周期管理 OSGi生命周期层有两种不同的作用: ...

  9. bootstrap 仿实例

    bootstrap实现一个网页 html文件 <!DOCTYPE html> <html> <head lang="en"> <meta ...

  10. 初次了解CSS3

    什么是CSS,什么是CSS3? 非常简单,CSS代表"Casading Style Sheets",就是样式表,是一种替代并为网站添加样式的标记性语言.现在所使用的CSS基本是在1 ...