【PHP】ThinkPHP5使用EasyTask插件做定时任务
目录
一、安装扩展
二、安装EasyTask插件
三、示例
1、创建Task.php类
2、任务配置
3、执行命令
四、注意事项
语言:PHP>=5.4
定时任务插件:EasyTask
运行环境:windows
EasyTask的Windows环境要求如下(推荐使用PHPENV集成环境):
PHP版本大于等于5.4
PHP开启json扩展(默认已安装)
PHP开启mbstring扩展(默认已安装)
PHP开启com_dotnet扩展(自己手动安装)
PHP开启wpc扩展(自己手动安装)
PHP正确配置环境变量
EasyTask官方文档:Windows安装 · EasyTask开发文档 · 看云
一、安装扩展
wpc扩展安装方法:下载wpc扩展一键安装包,根据PHP是32/64位执行一键安装包即可,切记此次说明的是PHP的位数,不是系统的位数,下载地址:https://download.csdn.net/download/qq_25285531/91471342,下载完成后解压,选择合适的位数,运行exe文件,选择PHP的安装目录,一键下载并注册COM组件,安装完成。
二、安装EasyTask插件
进入项目根目录,使用composer安装EasyTask插件,安装之后在“thinkphp\library\think\”文件夹下生成一个console文件夹
composer require easy-task/easy-task
三、示例
1、创建Task.php类
路径:application/command/Task.php
<?php
namespace app\command;use think\console\Command;
use think\console\Input;
use think\console\input\Argument;
use think\console\Output;/*** 定时任务*/
class Task extends Command
{// 配置参数protected function configure(){//设置名称为task$this->setName('task')//增加一个命令参数->addArgument('action', Argument::OPTIONAL, "action")->addArgument('force', Argument::OPTIONAL, "force");}protected function execute(Input $input, Output $output){//获取输入参数$action = trim($input->getArgument('action'));$force = trim($input->getArgument('force'));// 实例化$task = new \EasyTask\Task();// 设置时区,默认不会设置时区,需要的话可以自己设置$task->setTimeZone('Asia/Shanghai') // 设置进程是否在后台运行,默认为false非后台运行,执行时会出现几个黑色窗口,当设置为true时,运行时看不到黑色窗口界面$task->setDaemon(false);// 设置项目别名,建议每个项目单独设置一个值,有助于进程日志区分$task->setPrefix('test');// 设置服务是否自动重启,默认是关闭的,当进程挂掉的时候,EasyRask会自动重启进程$task->setAutoRecover(false);// EasyTask运行日志和缓存目录$task->setRunTimePath('./runtime/');/** 闭包函数类型的定时任务,把需要执行的代码写在闭包函数中* addFun($fun,$alas,$time,$used)* $fun 闭包函数,需要重复执行的代码,下面示例是重复写文件* $alas 任务别名,尽量不要重复* $time 任务执行间隔,默认为秒* $used 开启几个进程*/// 每5秒执行1次,即开启1个进程$task->addFunc(function () {/******** 这里可以写自己的执行任务 start **********/$this->write();/******** 这里可以写自己的执行任务 end **********/}, 'request', 5, 1);// 根据命令执行if ($action == 'start'){$task->start();} elseif ($action == 'status'){$task->status();}elseif ($action == 'stop'){$force = ($force == 'force'); //是否强制停止$task->stop($force);}else{exit('Command is not exist');}}// 写入文件public function write(){// 文件名:日期.txt$path = ROOT_PATH.DS.'public'. DS .'logs'. DS .date("Ymd").'.txt';$msg = '11<br/>';file_put_contents($path, $msg.PHP_EOL,FILE_APPEND);}}
上面执行自定义任务时,使用的是闭包函数的形式,也可以使用类名、shell命令的形式,具体使用方法可以参看官方文档说明:基础入门 · EasyTask开发文档 · 看云
2、任务配置
将上面创建的Task.php在配置文件application/command.php中配置,这里的“'app\command\Task'”路径是上面创建的Task.php的路径。
return ['app\command\Task' //加入需要cmd或者linux-crontab执行的PHP文件
];
3、执行命令
进入项目目录,输入cmd输入下面命令
php think task start 启动命令
php think task status 查询命令
php think task stop 关闭命令
php think task stop force 强制关闭命令
出现下面表示成功
关闭 cmd窗口即可关闭所以任务
四、注意事项
1、扩展要安装成功
2、检查EasyTask是否安装成功
3、相关路径要正确