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