workerman 啟動(dòng)報(bào)錯(cuò),already running 。按照手冊(cè) killall php , ps aux|grep WorkerMan|awk '{print $2}'|xargs kill -9,顯示沒(méi)有那個(gè)進(jìn)程,在測(cè)試服務(wù)器上可以跑起來(lái),上正式服務(wù)器就顯示已經(jīng)在運(yùn)行??凑搲行┡笥颜f(shuō)是之前運(yùn)行腳本執(zhí)行過(guò)就會(huì)有成功記錄,不知道是不是跟這個(gè)相關(guān)
那就設(shè)置下pid存儲(chǔ)位置,比如
...
Worker::$pidFile='/your/path/wm.pid';
Worker::runAll();
注意不要放到/tmp
目錄下
然后啟動(dòng)。
在regiset 里面指定了 pidFile。 啟動(dòng)的時(shí)候還是顯示already running ,并且pid文件也沒(méi)有生成,指定的目錄也有寫(xiě)入權(quán)限
嘗試了一下吧worker源碼里面lock函數(shù)的,邏輯改一下。$_startFile句柄不存或則有加鎖,workerman可以跑起來(lái)。
@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
我之前不小心把正在運(yùn)行的程序刪除了,用同個(gè)端口號(hào)重新寫(xiě)個(gè)程序,啟動(dòng)時(shí)和你的錯(cuò)誤一樣,我最后的辦法是新建一個(gè)被刪除文件同名的程序,程序中使用的端口號(hào)和之前一致,然后使用php xxx.php stop
我也遇到這個(gè)問(wèn)題了。
一開(kāi)始下載了Workerman,并按照demo隨便寫(xiě)了一個(gè)start.php,運(yùn)行后顯示already running。
后來(lái)刪除了上述的workerman項(xiàng)目和log,又去下了個(gè)Gateway,直接運(yùn)行start.php,也只顯示以下一句話(huà):
Workerman[/var/www/html/GatewayWorker/start.php] already running
而且此時(shí)使用ps aux|grep WorkerMan之類(lèi)的操作時(shí)根本找不到進(jìn)程。因此也不知道是根據(jù)什么判定的。
和樓上某位老哥一樣,將Worker::lock()方法直接返回true就能正常運(yùn)行了。
換臺(tái)服務(wù)器也是完全可行的。就是不知道還有哪里有問(wèn)題。。
上述問(wèn)題發(fā)生在vagrant-virtualBox虛擬機(jī)的nfs模式共享文件夾中。改為virtualbox共享方式就不會(huì)報(bào)了。
至于原因尚未弄清。