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

0

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


  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业务 请教一下这个是为什么 要如何修改

已邀请:

blogdaren - 常年游走于 Linux、PHP、C、VIM 之间【http://www.phpcreeper.com】

赞同来自: datoutie

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


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


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

a392223903 - 我是高久峰

赞同来自:

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

要回复问题请先登录注册