# 计划任务 ## 配置计划任务 安装完成后,在```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接口中(即同步请求中),把耗时严重或者执行资源过多的请求,改为异步的后台执行。实现代码是: ```php $taskDomain = new \Base\Domain\Task(); $taskDomain->push('App.Task.Demo', array('str' => '传递给计划任务的接口参数')); ``` 默认MQ是采用数据库存储,添加到MQ后,系统将会在1分钟内消费。 ## 如何编写计划任务接口 编写计划任务的接口,和普通的前台接口类似,区别在于: - 1、计划任务用于后台运行,通过调度器采用CLI方式执行 - 2、计划任务没有上下文信息,如果需要指定uid或者app_key,请手动添加接口参数 - 3、计划任务接口,推荐统一放置在```Task.*.*```里面 以下是一个计划任务示例代码: ```php array( 'str' => array('name' => 'str', 'default' => '示例参数'), ), ); } /** * 计划任务接口-示例 * @return string str 接收到的参数 */ public function run() { return array('str' => $this->str); } } ```