我在网上看见这种自定义的方法
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业务 请教一下这个是为什么 要如何修改
thinkphp 官方出了workerman扩展,可以试下
https://www.kancloud.cn/manual/thinkphp5/235128 tp5
https://www.kancloud.cn/manual/thinkphp6_0/1147857 tp6
据我所知,thinkphp官方对workerman的整合存在一些瑕疵,瑕疵的表现之一正如题主描述那样。
可以说workerman常编写的这个启动脚本就等同于thinkphp的一个个单独的命令类,所以说按照thinkphp的整合逻辑,如果想要一个个独立的启动脚本,那只能编写一个个独立的命令入口类(否则啊你永远只能玩一个启动脚本),即使如此也还需要进行一些特别的设置。
问题原因
单纯的更改一个命令的名字是不行的哈,关键是pidFile,因为运行时pidFile多个命令类共享的是同一个。
解决方案
每个命令类都有一个对应的配置文件,然后在各自的配置文件中分别定义不同的$pidFile,然后还要显示的设定一下
Worker::$pidFile = $your_unique_pid_file;(为什么还要设定一下,因为thinkphp默认读配置时会自动设置,但是一旦你设置了自定义类,它就不管了,所以......)
感谢您的详情解答!
参考我的文章https://www.gaojiufeng.cn/?id=319