ThinkPHP6.0使用EasyTask常驻内存多进程任务管理
功能基于EasyTask+ThinkPHP自定义指令开发,详情可以参考:
https://gitee.com/392223903/EasyTask
https://www.kancloud.cn/manual/thinkphp6_0/1037651
首先安装相关服务
composer require easy-task/easy-task
功能Test代码
<?php /** * @desc EasyTask 测试 php think test start --taskcommand timego * @author wolfcode * @url wolfcode.net * @支持常驻内存的PHP定时任务快捷命令 */ namespace app\command; use EasyTask\Task; use think\console\Command; use think\console\Input; use think\console\input\Argument; use think\console\input\Option; use think\console\Output; class Test extends Command { protected function configure() { $this->setName('Test') ->addArgument('argv', Argument::OPTIONAL, "your argv") ->addOption('force', NULL, Option::VALUE_REQUIRED, 'your force') ->addOption('taskcommand', NULL, Option::VALUE_REQUIRED, 'your taskcommand') ->setDescription('测试专用'); } protected function execute(Input $input, Output $output) { $argv = trim($input->getArgument('argv')); $force = $input->hasOption('force') ?: false; $taskcommand = $input->hasOption('taskcommand') ? $input->getOption('taskcommand') : "empty"; $task = new Task(); switch ($taskcommand) { case 'timego': $task->addFunc(function () { $now = date("Y-m-d H:i:s"); echo "[{$now}] It's timego now" . PHP_EOL; }, $taskcommand, 10, 2); // 1.添加闭包函数类型定时任务(开启2个进程,每隔10秒执行1次) break; default: $task->addFunc(function () { $now = date("Y-m-d H:i:s"); echo "[{$now}] it is empty taskcommand now " . PHP_EOL; }, $taskcommand, 30, 1); // 1.添加闭包函数类型定时任务(开启1个进程,每隔30秒执行1次) } switch ($argv) { case 'start': //初始化 $task->start(); // 设置非常驻内存 $task->setDaemon(false); // 设置项目名称 $task->setPrefix('EasyTask'); // 设置记录运行时目录(日志或缓存目录) $task->setRunTimePath(root_path() . 'runtime' . DIRECTORY_SEPARATOR); $output->writeln("EasyTask start {$taskcommand}"); break; case 'status': $task->status(); $output->writeln("EasyTask status {$taskcommand}"); break; case 'stop': $task->stop($force); $output->writeln("EasyTask stop {$force} {$taskcommand}"); break; default: exit('argv is not exist' . PHP_EOL); } return true; } }
在项目 config/console.php 中的'commands'中注册命令
启用内置命令启动
php think test start
效果如下:
执行timego:
php think test start --taskcommand timego
效果如下:
参数:
pid:任务进程
id name:任务别名
started:任务启动时间
time:任务执行时间
status:任务状态
ppid:守护进程id
启动任务: php console.php start
查询任务: php console.php status
普通关闭: php console.php stop
强制关闭: php console.php stop force
守护执行: $task->setDaemon(true)
声明:版权所有,违者必究 | 如未注明,均为原创 | 本网站采用 BY-NC-SA 协议进行授权
转载:转载请注明原文链接,违者必究 - :https://wolfcode.net/info/216/