centos8 , php 7.4
workerman 啟動正常,關(guān)閉時報錯,不斷的unlink workerman_start.php.pid文件,并不斷寫入workerman.log,至使硬盤爆掉
沒有修改過代碼,官網(wǎng)下載的,只寫了個測試案例:
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();
本地環(huán)境運行正常,服務(wù)器報的錯,服務(wù)器環(huán)境安裝測試都OK
哪個版本? 以debug模式啟動或停止? 原因就是上面說的pid文件誤刪了,如果還不確定,排查很簡單,kill -9 干掉所有workerman相關(guān)進程,然后干干凈凈重新啟動下,然后再看看pid文件是否存在。
workerman4.0.2,pid文件是存在的,創(chuàng)建worker的時候就生成了,但在stop的時候會刪除pid,關(guān)鍵是刪掉pid之后workerman沒有stop掉,exitAndClearAll()又循環(huán)了,又要去刪pid,結(jié)果找不到了,麻煩的就是此時根本退不出控制臺,只能硬強行關(guān)閉,重新登錄才行.后來重裝了系統(tǒng)還是centos8,php版本降到了7.2,沒有出現(xiàn)問題了
exitAndClearAll方法的幾行代碼邏輯比較簡單,如你所說:(在不帶-g參數(shù)參數(shù)情況下執(zhí)行stop,子進程接收到父進程發(fā)來的SIGINT后)會刪pid文件然后exit退出子進程,即便未正常退出,也會在一個特定的時間內(nèi)(wm內(nèi)核有個超時常量)由內(nèi)核執(zhí)行kill -9 強行干掉的,這是執(zhí)行stop后大體發(fā)生的事。// PHP7.4.3我沒現(xiàn)成版本,所以也不排除這個版本有潛在BUG的可能。
后面嘗試修改:
if(\is_file(static::$pidFile)){
@\unlink(static::$pidFile);
static::log("Workerman[" . \basename(static::$_startFile) . "] has been stopped");
}
后就一直:
workerman[start.php] stopping...