2.5 KiB
2.5 KiB
计划任务
配置计划任务
安装完成后,在pp_task_progress表可以看到全部的计划任务。
通过管理后台或者后台接口或者数据库pp_task_progress表,可以配置和维护计划任务。
执行计划任务
完成上述的计划任务配置后,有两种方式可以执行计划任务。一种是常规的定时执行,另一种是人工通过MQ触发执行。
需要注意的是,
- 1)通过crontab定时任务执行时,会存在一定的延时(1分钟左右,视具体任务执行时间而定),不能严格保证按配置的时间点执行
- 2)通过MQ触发执行时,默认采用的是数据库MQ实现,如果需要支持高并发,需要先切换到Redis MQ(在./config/di.php把MQ改为
\PhalApi\Task\MQ\RedisMQ)
定时执行计划任务
通过配置,可以定时执行计划任务。
在Linux系统上,通过crontab -e修改添加计划任务:
# PhalApi专业版计划任务
*/1 * * * * php /path/to/bin/run_task.php > /dev/null
如果需要手动执行或进行测试,可以进入专业版根目录,然后运行脚本命令:
$ php ./bin/run_task.php
通过MQ手动执行计划任务
通过MQ,可以在API接口中(即同步请求中),把耗时严重或者执行资源过多的请求,改为异步的后台执行。实现代码是:
$taskDomain = new \Base\Domain\Task();
$taskDomain->push('App.Task.Demo', array('str' => '传递给计划任务的接口参数'));
默认MQ是采用数据库存储,添加到MQ后,系统将会在1分钟内消费。
如何编写计划任务接口
编写计划任务的接口,和普通的前台接口类似,区别在于:
- 1、计划任务用于后台运行,通过调度器采用CLI方式执行
- 2、计划任务没有上下文信息,如果需要指定uid或者app_key,请手动添加接口参数
- 3、计划任务接口,推荐统一放置在
Task.*.*里面
以下是一个计划任务示例代码:
<?php
namespace Task\Api;
use App\Task\Api;
class Demo extends Api {
public function getRules() {
return array(
'demo' => array(
'str' => array('name' => 'str', 'default' => '示例参数'),
),
);
}
/**
* 计划任务接口-示例
* @return string str 接收到的参数
*/
public function run() {
return array('str' => $this->str);
}
}