laravel 使用Workerman , 已经开了一个服务以后(php artisan workerman:command start d),再开另一个(php artisan workermanweb:command start d)提示已经运行, Workerman start in DEBUG mode Workerman already running 端口号确定不同 ,怎么处理才好 ?
1、报告 already running 的原因是因为workerman要求不能重复启动已经在运行的同一个启动脚本,这是为了准确的stop 、restart等所需。在laravel中 artisan 脚本就相当于我们常见的 start.php 启动脚本,根据这个原理我们有如下参考做法:cp /path/to/artisan /path/to/artisan2 php artisan xxxx xxxx php artisan2 xxxx xxxx
2. 参考方案二:php artisan make:command MyCommandclass
MyCommand extend Command { public function start() { $this->worker1 = new Worker("tcp://0.0.0.0:8888"); $this->worker2 = new Worker("http://0.0.0.0:9999"); //......... // 启动多少个进程对外提供服务 $this->worker1->count = 3; $this->worker1->count = 4; // 运行worker Worker::runAll(); } }
嗯,两种方式都试过了,第一种 启动的时候 提示启动命令不存在,第2个启动的时候 提示不能在一个文件启动2个 worker, 试了下另外的方式 Worker::runAll(); 在这个方法中传递参数进去 然后根据传递的参数生成.pid文件。
@5248: 两种方式工作方式亲自实践了下,都工作OK。
@614 我这儿也不行诶 第二种是already running 第一种我觉得不是个方法 忽略了
@614:嗯,理论上这两个方法都可以的,但是确实在我这不行,可能是laravel版本的问题吧
@5776:我这边稍微改了下,让它启动的时候读取不同的pid文件就可以了
1、报告 already running 的原因是因为workerman要求不能重复启动已经在运行的同一个启动脚本,这是为了准确的stop 、restart等所需。在laravel中 artisan 脚本就相当于我们常见的 start.php 启动脚本,根据这个原理我们有如下参考做法:cp /path/to/artisan /path/to/artisan2
php artisan xxxx xxxx
php artisan2 xxxx xxxx
2. 参考方案二:php artisan make:command MyCommandclass
嗯,两种方式都试过了,第一种 启动的时候 提示启动命令不存在,第2个启动的时候 提示不能在一个文件启动2个 worker, 试了下另外的方式
Worker::runAll(); 在这个方法中传递参数进去 然后根据传递的参数生成.pid文件。
@5248: 两种方式工作方式亲自实践了下,都工作OK。
@614 我这儿也不行诶 第二种是already running 第一种我觉得不是个方法 忽略了
@614:嗯,理论上这两个方法都可以的,但是确实在我这不行,可能是laravel版本的问题吧
@5776:我这边稍微改了下,让它启动的时候读取不同的pid文件就可以了