Laravel 8 + workerman 无法以daemon方式启动!

Endy

php artisan worker start --d
Workerman[artisan] start in DEBUG mode
--------------------------------------------- WORKERMAN ---------------------------------------------
Workerman version:4.0.14 PHP version:7.4.9

升级以后无法再以守护进程方式启动

4676 4 0
4个回答

walkor

--d 改成 -d试下

  • Endy 2020-11-16

    php artisan workerman start -d

    The "-d" option does not exist.

  • Endy 2020-11-16

    在handle里加日志看了action和option都没有问题:
    [2020-11-16 09:33:52] local.INFO: action:start
    [2020-11-16 09:33:52] local.INFO: option:-d

Endy

截图

源码改了两个地方暂时没问题了,看上去是handle里对argv的赋值处理并没有能够传递到Worker.php,需要看看怎样处理更为优雅。

  • walkor 2020-11-16

    你看下为什么 artisan 无法传递 -d吧。

Endy

artisan的option明确说明要以--为前缀:Options, like arguments, are another form of user input. Options are prefixed by two hyphens (--) when they are specified on the command line.
又分析了一下,handle中示例是以global $argv来赋值参数,Worker.php中取的是$_SERVER['argv'],前者赋值后产生了一个深拷贝副本,所以并没有改变到后者的值!!!!
截图
截图

所以修改Command中的argv赋值方法为直接向$_SERVER['argv]进行赋值,问题解决!

  • walkor 2020-11-16

    看到网上laravel整合workerman的文章都是操作的global $argv;,我重新发个版本,把$_SERVER['argv]操作改回操作 $argv;

  • Endy 2020-11-16

    [/bow]

  • walkor 2020-11-16

    更新到4.0.16或者后续的更高版本,已经改回操作 global $argv;

sunshineshuai

我也遇到此类问题了!我的这两种方式获取的参数是相同的,但是也是启动不了

php artisan workman start --d
----------------------- WORKERMAN -----------------------------
Workerman version:4.0.19 PHP version:7.3.4
------------------------ WORKERS -------------------------------
worker listen processes status

打印两种方式获取到的参数是一样的,但是也启动不了

array:4 [
0 => "artisan"
1 => "workman"
2 => "start"
3 => "d"
]
array:4 [
0 => "artisan"
1 => "workman"
2 => "start"
3 => "d"
]

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