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

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

原创 2021-01-11 php 900
分享给朋友:

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

分享给朋友:

相关文章

在PHP7+下监控Memcached服务、性能、扇区等信息

PHPMemcachedAdmin:一款网页可视化的Memcached工具

Swoole的PHP协程开发框架 imi 集成ThinkPHP模板引擎 think-template

在 imi 框架根目录中执行composer&nbsp;require&nbsp;topthink/think-template安装好模板引擎后,找到路径\vendor\topthink\think-template\src\Template.php找到 fetch() 渲染模板文件的方法,将最后一

PHP7下MongoDB自增或自减一个字段的值

findAndModify属于原子操作模型数据,所谓原子操作就是要么这个文档保存到Mongodb,要么没有保存到Mongodb,不会出现查询到的文档没有保存完整的情况。

PHP的面向对象解析

早期编程由于受电脑硬件限制,程序都是追求效率,而忽略可理解性,扩充性,随着硬件技术的发展,编程越来越重视多人开发,程序员越来越重视程序的可靠性,可扩展性,可维护性,所以刺激了程序语言的发展

PHP8新特性盘点

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

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

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

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 组织」及「最积极运营项目」等子类,本页面用于投票选出「最佳人气项目」;