请教下用thinkphp自定义命令整合workman的问题

datoutie

我在网上看见这种自定义的方法

  protected function configure()
    {
        $this->setName('mobile')
            ->addArgument('action', Argument::OPTIONAL, "action  start|stop|restart")
            ->addArgument('type', Argument::OPTIONAL, "d -d")
            ->setDescription('mobile');
    }

    protected function execute(Input $input, Output $output)
    {
        global $argv;
        $action = trim($input->getArgument('action'));
        $type   = trim($input->getArgument('type')) ? '-d' : '';

        $argv[0] = 'mobile';
        $argv[1] = $action;
        $argv[2] = $type ? '-d' : '';
        $output->writeln("Hello," . $action . '!' . $type);
        $this->start();
    }

然后运行php think mobile start d这样没问题的
但我在创建一个命令名称不一样 Workerman业务也不一样的新的文件 上面mobile改成app
我运行php think app start 会显示正在运行 执行status显示的是mobile的运行状态。。导致我启动不了app的这个Workerman业务 请教一下这个是为什么 要如何修改

3456 3 0
3个回答

xiuwang
  • 暂无评论
blogdaren

据我所知,thinkphp官方对workerman的整合存在一些瑕疵,瑕疵的表现之一正如题主描述那样。
可以说workerman常编写的这个启动脚本就等同于thinkphp的一个个单独的命令类,所以说按照thinkphp的整合逻辑,如果想要一个个独立的启动脚本,那只能编写一个个独立的命令入口类(否则啊你永远只能玩一个启动脚本),即使如此也还需要进行一些特别的设置。

问题原因
单纯的更改一个命令的名字是不行的哈,关键是pidFile,因为运行时pidFile多个命令类共享的是同一个。

解决方案
每个命令类都有一个对应的配置文件,然后在各自的配置文件中分别定义不同的$pidFile,然后还要显示的设定一下
Worker::$pidFile = $your_unique_pid_file;(为什么还要设定一下,因为thinkphp默认读配置时会自动设置,但是一旦你设置了自定义类,它就不管了,所以......)

a392223903

参考我的文章https://www.gaojiufeng.cn/?id=319

  • 暂无评论
年代过于久远,无法发表回答
🔝