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'中注册命令

QQ截图20210111123952.png

启用内置命令启动

php think test start

效果如下:

QQ截图20210111115354.png

执行timego:

php think test start --taskcommand timego

效果如下:

QQ截图20210111123543.png

参数: 

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


如需守护执行,可以参考:http://rango.swoole.com/archives/59

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开微信扫一扫,即可进行扫码打赏哦

分享到
  • QQ好友
  • 微信好友
  • 新浪微博