当前位置:首页 > php > ThinkPHP6.0使用EasyTask常驻内存多进程任务管理

ThinkPHP6.0使用EasyTask常驻内存多进程任务管理

原创 2021-01-11 php 100

功能基于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

声明:版权所有,违者必究 | 如未注明,均为原创 | 本网站采用 BY-NC-SA 协议进行授权

转载:转载请注明原文链接,违者必究 - :https://www.wolfcode.net/info/216/

分享给朋友:

相关文章

PHP8新特性盘点

PHP 8.0.0 已经正式发布了,这个对于PHPer无疑是一个令人振奋的消息。它包含了很多新功能与优化项, 包括命名参数、联合类型、注解、构造器属性提升、match表达式、nullsafe运算符、JIT,并改进了类型系统、错误处理、语法一致性。

PHP8新特性系列:构造器属性提升使用及注意事项

本篇主要说下PHP8构造器属性提升的用法,这个特性对于一些需要在构造器中设置或初始化一些类属性的时候非常有用(包括public、protected和private),比如在PHP7中你可以这样定义一个类的属性,然后在构造方法中传值。class&nbsp;Point&nbsp;{ &nbsp;&nb

2020年底,博客又重构了!PHP8.0+Golang

从vue脱坑了,本来是想升级vue3.0来玩玩的,但是看到3.0的语法,跟2.0完全不是一个层面的,你可以理解为 new vue!!!而且有点不太习惯了~~~刚好PHP8.0的到来,索性直接上了8.0,因为之前服务器编译的PHP是7.3,也不想去升级影响其他服务,所以直接挂在了docker上,目前直

ThinkPHP6.0在PHP8下报错解决方法

PHP8下全新安装ThinkPHP6.0.X出现报错,如下Deprecated:&nbsp;Method&nbsp;ReflectionParameter::getClass()&nbsp;is&nbsp;deprecated&nbsp;in&nbsp;xxxx\vendor\topthink\fr

MongoDB驱动聚合查询aggregate在分组分页排序后出现的数据混乱问题

最近在获取MongoDB数据时需要把重复的数据分组来排序,语言版本:PHP7

PHP依赖管理工具composer 2.0正式发布

composer 2.0 现在已更新!性能改进说明(英文)https://blog.packagist.com/composer-2-0-is-now-available/1.有什么新功能?对于命令行(CLI)用户新的平台检查功能检查运行时 PHP 版本和可用扩展,以确保它们与项目依赖项匹配。如果发

2020年度最受欢迎中国开源软件评选【投Thinkphp一票否】

评选活动分为「最佳人气项目」、「优秀 Gitee 组织」及「最积极运营项目」等子类,本页面用于投票选出「最佳人气项目」;

PHP 8新特性之JIT简介

PHP8 alpha1已经在发布,相信关于JIT是大家最关心的,它到底怎么用,有什么要注意的,以及性能提升到底咋样?首先,我们来看一张图:左图是PHP8之前的Opcache流程示意图, 右图是PHP8中的Opcache示意图, 可以看出几个关键点:Opcache会做opcode层面的优化,比如图中的