phpsocket.io php7.3的時(shí)候一切正常;
切換成7.4以后,消息收發(fā)正常;
status、connections命令消息無(wú)任何顯示;
stop命令提示:stop fail。
現(xiàn)象:
運(yùn)行 php start.php stop 提示 stop fail
原因:幾種可能性
第一種可能性:
前提是以debug方式啟動(dòng)的workerman,開發(fā)者在終端按了ctrl z給workerman發(fā)送了SIGSTOP信號(hào),導(dǎo)致workerman進(jìn)入后臺(tái)并掛起(暫停),所以無(wú)法響應(yīng)stop命令(SIGINT信號(hào))。
解決:
在啟動(dòng)workerman的終端輸入fg(發(fā)送SIGCONT信號(hào))然后回車,將workerman切回前臺(tái)運(yùn)行,按ctrl c(發(fā)送SIGINT信號(hào))停止workerman。
如果無(wú)法停止,嘗試運(yùn)行以下兩條命令
killall -9 php
ps aux|grep -i workerman|awk '{print $2}'|xargs kill -9
第二種可能性:
運(yùn)行stop的用戶和workerman啟動(dòng)用戶不一致,即stop用戶沒(méi)有權(quán)限停止workerman。
解決:
切換到啟動(dòng)workerman的用戶,或者用權(quán)限更高的用戶停止workerman。
第三種可能性:
保存workerman主進(jìn)程pid文件被刪除,導(dǎo)致腳本找不到pid進(jìn)程,導(dǎo)致停止失敗。
解決:
將pid文件保存到安全的位置,參見手冊(cè)Worker::$pidFile。
第四種可能性:
workerman主進(jìn)程pid文件對(duì)應(yīng)的進(jìn)程不是workerman進(jìn)程。
解決:
打開workerman的主進(jìn)程的pid文件查看主進(jìn)程pid,pid文件默認(rèn)在Workerman平行的目錄里。運(yùn)行命令 ps aux | grep 主進(jìn)程pid 查看對(duì)應(yīng)的進(jìn)程是否是Workerman進(jìn)程,如果不是,可能是服務(wù)器重啟過(guò),導(dǎo)致workerman保存的pid是過(guò)期的pid,而這個(gè)pid剛好被其它進(jìn)程使用,導(dǎo)致停止失敗。如果是這種情況,將pid文件刪除即可。