SAE定时执行任务

2014年10月8日dbonly

原文链接http://sae.sina.com.cn/doc/php/cron.html

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段,例如:

    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语法。例如:

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

      unix Crontab的语法形式如下:

      *     *     *   *    *
      -     -     -   -    -
      |     |     |   |    |
      |     |     |   |    +----- 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。

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

    • description

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

    • timezone

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

    • login

      可选。HTTP基础认证设置,格式: 用户名@密码

    • times

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

注解

Cron使用HTTP GET方式请求URL

Comments (4)

  • 贴吧机器人·SAE搭建教程 – 豆瓣不小心

    2014年10月8日 at 上午10:24

    […] cron: – description: dbbxxtest url: cron.php schedule: * * * * * 注:代码的意思是每分钟访问一次目录下的cron.php页面,实现机器人的自动检测和回复任务。 默认不需要修改。如果你上传的代码包不在根目录,那么需要修改cron.php路径,例如 url: /bot/cron.php schedule: * * * * *这一行是时间设定,* * * * * 表示每分钟, 如果想修改为没五分钟访问一次页面,即为*/5 * * * * 如想详细了解cron定时任务请查看此文 SAE定时执行任务 […]

  • 北斗

    2014年10月8日 at 下午3:44

    task queue怎么设置?百度看不懂啊

    1. 豆瓣不小心

      2014年10月8日 at 下午3:48

      😕 我也不懂….

  • 贴吧机器人·SAE搭建教程

    2015年2月14日 at 上午11:11

    […] cron: – description: dbbxxtest url: cron.php schedule: * * * * * 注:代码的意思是每分钟访问一次目录下的cron.php页面,实现机器人的自动检测和回复任务。 默认不需要修改。如果你上传的代码包不在根目录,那么需要修改cron.php路径,例如 url: /bot/cron.php schedule: * * * * *这一行是时间设定,* * * * * 表示每分钟, 如果想修改为没五分钟访问一次页面,即为*/5 * * * * 如想详细了解cron定时任务请查看此文 SAE定时执行任务 […]

留言

电子邮件地址不会被公开。 必填项已用*标注

上一篇 下一篇