centos8 , php 7.4 workerman 启动正常,关闭时报错,不断的unlink workerman_start.php.pid文件,并不断写入workerman.log,至使硬盘爆掉
报错的原因是因为误删了对应的pid文件;
没有修改过代码,官网下载的,只写了个测试案例: use \Workerman\Worker;
require_once __DIR__ . '/Autoloader.php'; $worker = new Worker('http://0.0.0.0:8088'); $worker->onMessage = function($connection,$data){ $connection->send($data); }; $worker->count = 2; Worker::runAll();
本地环境运行正常,服务器报的错,服务器环境安装测试都OK
哪个版本? 以debug模式启动或停止? 原因就是上面说的pid文件误删了,如果还不确定,排查很简单,kill -9 干掉所有workerman相关进程,然后干干净净重新启动下,然后再看看pid文件是否存在。
workerman4.0.2,pid文件是存在的,创建worker的时候就生成了,但在stop的时候会删除pid,关键是删掉pid之后workerman没有stop掉,exitAndClearAll()又循环了,又要去删pid,结果找不到了,麻烦的就是此时根本退不出控制台,只能硬强行关闭,重新登录才行.后来重装了系统还是centos8,php版本降到了7.2,没有出现问题了
exitAndClearAll方法的几行代码逻辑比较简单,如你所说:(在不带-g参数参数情况下执行stop,子进程接收到父进程发来的SIGINT后)会删pid文件然后exit退出子进程,即便未正常退出,也会在一个特定的时间内(wm内核有个超时常量)由内核执行kill -9 强行干掉的,这是执行stop后大体发生的事。// PHP7.4.3我没现成版本,所以也不排除这个版本有潜在BUG的可能。
后面尝试修改: if(\is_file(static::$pidFile)){ @\unlink(static::$pidFile); static::log("Workerman[" . \basename(static::$_startFile) . "] has been stopped"); } 后就一直: workerman[start.php] stopping...
单看你行if修改尝没有什么问题,也不知道你还动过什么,如果没有把握,先不要随意修改源码,先按照我刚说的思路排查问题,这样排查不出什么。
你自己设置pid文件 的位置就可以,设定到完全权限的目录
非常感谢,来来回回版本切换好几回,最后设置pid文件位置解决
报错的原因是因为误删了对应的pid文件;
没有修改过代码,官网下载的,只写了个测试案例:
use \Workerman\Worker;
本地环境运行正常,服务器报的错,服务器环境安装测试都OK
哪个版本? 以debug模式启动或停止? 原因就是上面说的pid文件误删了,如果还不确定,排查很简单,kill -9 干掉所有workerman相关进程,然后干干净净重新启动下,然后再看看pid文件是否存在。
workerman4.0.2,pid文件是存在的,创建worker的时候就生成了,但在stop的时候会删除pid,关键是删掉pid之后workerman没有stop掉,exitAndClearAll()又循环了,又要去删pid,结果找不到了,麻烦的就是此时根本退不出控制台,只能硬强行关闭,重新登录才行.后来重装了系统还是centos8,php版本降到了7.2,没有出现问题了
exitAndClearAll方法的几行代码逻辑比较简单,如你所说:(在不带-g参数参数情况下执行stop,子进程接收到父进程发来的SIGINT后)会删pid文件然后exit退出子进程,即便未正常退出,也会在一个特定的时间内(wm内核有个超时常量)由内核执行kill -9 强行干掉的,这是执行stop后大体发生的事。// PHP7.4.3我没现成版本,所以也不排除这个版本有潜在BUG的可能。
后面尝试修改:
if(\is_file(static::$pidFile)){
@\unlink(static::$pidFile);
static::log("Workerman[" . \basename(static::$_startFile) . "] has been stopped");
}
后就一直:
workerman[start.php] stopping...
单看你行if修改尝没有什么问题,也不知道你还动过什么,如果没有把握,先不要随意修改源码,先按照我刚说的思路排查问题,这样排查不出什么。
你自己设置pid文件 的位置就可以,设定到完全权限的目录
非常感谢,来来回回版本切换好几回,最后设置pid文件位置解决