YurunPHP 1.3新加入了定时任务的功能,它可以定时执行一些操作,拥有高度自由的触发时间配置功能。当然这个定时是不一定准时的,下面会有说明。如果需要极其准确的定时任务,请使用Linux下的Cron或者Windows的计划任务功能。
> YurunPHP定时任务功能不推荐执行时间较长的任务!
### 原理解析
当用户访问时,判断上次执行时间和当前时间是否满足再次调用的条件,满足则调用,不满足则不调用。YurunPHP框架使用文件锁,保证同时只有一个请求会执行定时任务。预防并发同时执行、恶意攻击的情况。
### 配置方法
#### 自动触发
在项目的Config目录下创建task.php文件,复制下面的内容
~~~
return array(
'List' => array(), // 任务列表
'Status' => false, // 是否开启自动检测,默认为false
'ExecPercent' => 1, // 触发概率,0-1代表0%-100%,默认为1
'OnlyOnce' => false, // 是否只执行一个任务就结束,防止一个请求执行时间过长导致失败。默认为false
);
~~~
如果需要自动触发需要在init.php中编写如下代码
~~~
Event::register('YURUN_APP_LOAD_COMPLETE',function(){
// 启用任务
Task::init();
});
~~~
#### 手动触发
在任意地方执行下面的语句
~~~
Task::exec();
~~~
### 任务开发
1.在项目目录下创建Task文件夹
2.在Task文件夹下创建TestTask.class.php
3.在TestTask.class.php中为以下代码
~~~
<?php
class TestTask extends TaskBase
{
public static $name = '任务名称';
public static function exec()
{
// TODO: 任务操作
}
}
~~~
4.在配置文件task.php的List下加入
~~~
'Test' => array(
// 触发事件条件1
array(
'StartTime' => 0,
'StopTime' => 0,
'Mode' => 0,
'Month' => 0,
'Day' => 0,
'Week' => 0,
'Hour' => 0,
'Minute' => 0,
'Second' => 0,
'Seconds' => 0,
),
// 触发事件条件2
array(
'StartTime' => 0,
'StopTime' => 0,
'Mode' => 0,
'Month' => 0,
'Day' => 0,
'Week' => 0,
'Hour' => 0,
'Minute' => 0,
'Second' => 0,
'Seconds' => 0,
),
),
~~~
上面的触发条件有需要可以无限增加,条件参数说明看下表:
| 参数名 | 说明 |
| --- | --- |
| StartTime | 时间戳。任务允许执行的开始时间。可不设置。 |
| StopTime | 时间戳。任务允许执行的结束时间。可不设置。 |
| Mode | 条件判断模式。可不设置。看下面一个表格。 |
| Month | 几月。可不设置。 |
| Day | 几日。可不设置。 |
| Week | 星期几,周一-周日=1-7。可不设置。 |
| Hour | 小时。可不设置。 |
| Minute | 分钟。可不设置。 |
| Second | 秒数。可不设置。 |
| Seconds | 间隔多少秒执行,Mode为MODE_SECOND时有效。 |
#### Mode可选值表:
| 参数名 | 说明 |
| --- | --- |
| Task::MODE_SECOND | 按秒执行 |
| Task::MODE_EVERY_YEAR | 按每年执行 |
| Task::MODE_EVERY_MONTH | 按每月执行 |
| Task::MODE_EVERY_WEEK | 按每周执行 |
| Task::MODE_EVERY_DAY | 按每日执行 |
| Task::MODE_EVERY_HOUR | 按每小时执行 |
- 序言
- 有些话想说
- 基础入门
- 简介
- 下载安装YurunPHP
- 运行环境
- 开发规范
- 目录结构
- 模块
- 控制器
- 自动加载
- 手动加载
- 项目配置
- 入口文件
- 项目目录结构
- 配置文件
- 驱动配置
- 数据库配置
- 项目初始化处理
- 框架编译
- 项目部署
- 控制器
- 创建控制器
- 加载模版显示页面
- AJAX返回数据
- 模型
- 创建模型
- 实例化模型
- 数据管理
- 连贯操作
- distinct
- field
- from
- where
- wherePk
- group
- having
- order
- limit
- join
- page
- headTotal/footTotal
- 连贯操作收尾方法
- select
- selectPage
- buildSQL
- selectValue
- selectBy
- getBy
- getByPk
- random
- inc
- dec
- add
- edit
- delete
- 合计函数
- save
- 执行SQL语句
- 创建数据并验证
- 字段映射
- 增删改查前置和后置
- Response类
- GET/POST/COOKIE/REQUEST
- Cookie
- Session
- 如何自定义Session存储
- 数据库操作
- 常用操作
- 查询记录
- 存储过程
- 数据库函数
- MSSQL
- 视图
- 调用视图
- 给视图传值
- 模版引擎
- 输出
- 使用PHP代码
- 模版标签
- if
- switch
- for
- counter
- foreach
- include
- js/css/image
- url
- origin
- 模版常量替换
- 后台视图控件
- 通用属性用法
- 数据集绑定
- 下拉框(select)
- 单选框(radio)
- 单选框组(radiogroup)
- 选择框(checkbox)
- 选择框组(checkboxgroup)
- 表格(table)
- 文本框(textbox)
- 分页条(pagebar)
- 数据验证
- 验证方法
- between
- betweenEqual
- empty_str
- not_empty_str
- regex
- length
- lengthChar
- mobile
- tel
- phone
- postcode
- url
- ip
- lt/gt/ltEqual/gtEqual
- equal/unequal
- in/notin
- idcard
- 路由
- 路由配置
- 自定义分层
- 缓存
- 缓存配置
- 使用缓存
- 配置
- 配置驱动配置
- 使用配置
- 过滤域名
- 日志
- 日志驱动配置
- 文件日志
- 事件
- 事件列表
- 插件
- 多语言支持
- 定时任务
- API接口开发
- CLI命令行模式
- Soap WebService