美文网首页初见
TP5.1结合taskphp3.0定时任务

TP5.1结合taskphp3.0定时任务

作者: 小猫熊未命名 | 来源:发表于2019-08-28 08:26 被阅读0次

    1.第一步,安装最新的taskPHP

      composer require taskphp/taskphp dev-master
    

    2.第二步, 配置TP5项目的 application/command.php 文件

    return [
        'app\crontab\Taskphp',
    ];
    

    第三步, 创建Taskphp命令文件 application/index/command/Taskphp.php

    <?php
    
    namespace app\crontab;
    
    
    use think\console\Command;
    use think\console\Input;
    use think\console\input\Argument;
    use think\console\Output;
    
    define('APP_PATH', __DIR__);
    
    require_once APP_PATH . '/../../vendor/taskphp/taskphp/src/taskphp/base.php';
    
    class Taskphp extends Command
    {
    
        protected function get_config()
        {
            return [
                //任务列表
                'task_list' => [
                    //key为任务名,多任务下名称必须唯一
                    'demo' => [
                        'callback' => ['app\\crontab\\Demo', 'run'],//任务调用:类名和方法
                        //指定任务进程最大内存  系统默认为512M
                        'worker_memory' => '10M',
                        //开启任务进程的多线程模式
                        'worker_pthreads' => false,
                        //任务的进程数 系统默认1
                        'worker_count' => 1,
                        //crontad格式 :秒 分 时 天 月 年 周
                        'crontab' => '/5 * * * * * *',
                    ],
                    'test' => [
                        'callback' => ['app\\crontab\\Demo', 'test'],//任务调用:类名和方法
                        //指定任务进程最大内存  系统默认为512M
                        'worker_memory' => '10M',
                        //开启任务进程的多线程模式
                        'worker_pthreads' => false,
                        //任务的进程数 系统默认1
                        'worker_count' => 1,
                        //crontad格式 :秒 分 时 天 月 年 周
                        'crontab' => '/5 * * * * * *',
                    ],
                ],
            ];
        }
    
        protected function configure()
        {
            $this->addArgument('param', Argument::OPTIONAL);
            // 设置命令名称
            $this->setName($_SERVER['argv'][1])->setDescription('this is a taskphp!');
        }
    
        protected function execute(Input $input, Output $output)
        {
            //系统配置
            $config = $this->get_config();
            //加载配置信息
            \taskphp\Config::load($config);
            //定义启动文件入口标记
            define("START_PATH", dirname(APP_PATH));
            //运行框架
            \taskphp\App::run();
        }
    }
    

    第四步, 创建Demo任务文件 application/crontab/Demo.php

    <?php
    
    namespace app\crontab;
    
    
    use taskphp\Utils;
    
    class Demo
    {
        public static function run()
        {
            Utils::log('run开始时间:' . date('Y-m-d H:i:s'));
        }
    
        public static function test()
        {
            Utils::log('test开始时间:' . date('Y-m-d H:i:s'));
        }
    }
    

    第五步,大功告成开始使用

    php think start demo
    

    然后就出现


    clipboard.png

    查了下taskphp生成的日志问题提示:出现缺少queue.db 文件

    [2019-08-27 10:54:28.90645100][DEBUG]:create E:\appback\runtime\crontab\queue.db error
    [2019-08-27 10:54:35.16849900][DEBUG]:create E:\appback\runtime\crontab\queue.db error
    [2019-08-27 10:54:35.17215400][DEBUG]:taskPHP daemon pid:17360 Stop
    [2019-08-27 10:54:35.24464400][DEBUG]:create E:\appback\runtime\crontab\queue.db error
    

    发现taskphp默认找的是 Sqlite 驱动类型 ,这里切换为Redis(注:记得开启PHP redis扩展)

    //系统队列配置
    'queue'=>[
        //驱动类型 Shm|Redis|Sqlite|Mysql 生产环境推荐使用Shm或者Redis驱动 由于Mysql和Sqlite有I/O 相对来说Mysql和Sqlite性能比较差
        'drive'         => 'Redis',
    ],
    

    再次启动
    php think start demo


    1clipboard.png

    相关文章

      网友评论

        本文标题:TP5.1结合taskphp3.0定时任务

        本文链接:https://www.haomeiwen.com/subject/bciuectx.html