停止失敗
現(xiàn)象:
運(yùn)行 php start.php stop
提示 stop fail
第一種可能性
前提是以debug方式啟動(dòng)的workerman,開(kāi)發(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))然后回車(chē),將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文件保存到安全的位置,參見(jiàn)手冊(cè)Worker::$pidFile。
第四種可能性
workerman主進(jìn)程pid文件對(duì)應(yīng)的進(jìn)程不是workerman進(jìn)程。
解決:
打開(kāi)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文件刪除即可。
第五種可能性
安裝了grpc擴(kuò)展,但是沒(méi)有給grpc擴(kuò)展設(shè)置相應(yīng)的環(huán)境變量,啟動(dòng)后會(huì)多fork出一個(gè)掛載進(jìn)程,停止時(shí)導(dǎo)致失敗。