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