初见

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

2019-08-28  本文已影响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
上一篇下一篇

猜你喜欢

热点阅读