workerman 启动报错,already running 。

peter没有潘

workerman 启动报错,already running 。按照手册 killall php , ps aux|grep WorkerMan|awk '{print $2}'|xargs kill -9,显示没有那个进程,在测试服务器上可以跑起来,上正式服务器就显示已经在运行。看论坛有些朋友说是之前运行脚本执行过就会有成功记录,不知道是不是跟这个相关

8541 6 0
6个回答

six

ps auxf 看下workerman进程在不在

walkor

找到workerman的pid文件删掉。pid默认位置与workerman源码目录的上一层目录。

walkor

那就设置下pid存储位置,比如

...
Worker::$pidFile='/your/path/wm.pid';
Worker::runAll();

注意不要放到/tmp目录下
然后启动。

  • peter没有潘 2019-11-04

    在regiset 里面指定了 pidFile。 启动的时候还是显示already running ,并且pid文件也没有生成,指定的目录也有写入权限

  • peter没有潘 2019-11-05

    尝试了一下吧worker源码里面lock函数的,逻辑改一下。$_startFile句柄不存或则有加锁,workerman可以跑起来。

  • walkor 2019-11-05

    你们有什么特殊的用法么?$_startFile怎么会不存在呢

  • peter没有潘 2019-11-05

    @1:没有吧 gateway的例子基础之上改的

  • peter没有潘 2019-11-05

    @1:protected static function lock()
    {
    $fd = \fopen(static::$_startFile, 'r');
    if (!$fd || !flock($fd, LOCK_EX)) {
    static::log("Workerman[".static::$_startFile."] already running");
    exit;
    }
    }
    这里的flock判断为true

a392223903

尝试 killall -9 php

lxy

我之前不小心把正在运行的程序删除了,用同个端口号重新写个程序,启动时和你的错误一样,我最后的办法是新建一个被删除文件同名的程序,程序中使用的端口号和之前一致,然后使用php xxx.php stop

  • 暂无评论
alex343136121

我也遇到这个问题了。
一开始下载了Workerman,并按照demo随便写了一个start.php,运行后显示already running。
后来删除了上述的workerman项目和log,又去下了个Gateway,直接运行start.php,也只显示以下一句话:

Workerman[/var/www/html/GatewayWorker/start.php] already running

而且此时使用ps aux|grep WorkerMan之类的操作时根本找不到进程。因此也不知道是根据什么判定的。

和楼上某位老哥一样,将Worker::lock()方法直接返回true就能正常运行了。
换台服务器也是完全可行的。就是不知道还有哪里有问题。。

  • alex343136121 2019-12-07

    上述问题发生在vagrant-virtualBox虚拟机的nfs模式共享文件夹中。改为virtualbox共享方式就不会报了。
    至于原因尚未弄清。

年代过于久远,无法发表回答
🔝