在生產(chǎn)環(huán)境中 php start.php restart之后
Fatal error: Uncaught Exception: Address already in use in
29403
第一次的stopping的日志是正常輸出的,因?yàn)閜id文件中的pid值和系統(tǒng)的對(duì)的上,然后看了下只stop了兩個(gè)pid,導(dǎo)致start的時(shí)候端口被占用了。
這里寫(xiě)具體的系統(tǒng)環(huán)境相關(guān)信息
php版本 8.1
系統(tǒng)是centos
本地mac運(yùn)行沒(méi)這個(gè)問(wèn)題
出現(xiàn)這個(gè)問(wèn)題一般是因?yàn)閞untime下的pid文件和系統(tǒng)實(shí)際情況不一致導(dǎo)致的,
stop時(shí)會(huì)通過(guò)pid文件找到進(jìn)程,然后停止。如果pid文件里的記錄值是錯(cuò)的導(dǎo)致無(wú)法停止之前的進(jìn)程,再次啟動(dòng)時(shí)會(huì)報(bào)占用錯(cuò)誤。
造成pid文件不一致的原因一般是將錯(cuò)誤的將pid文件放到了代碼庫(kù),或者上傳文件時(shí)上傳了本地的pid等原因。
另外如果有手動(dòng)kill了workerman的主進(jìn)程,子進(jìn)程還存在,也會(huì)有此問(wèn)題。
社區(qū)里反饋有一些擴(kuò)展影響了php的行為例如grpc擴(kuò)展沒(méi)有正確配置也會(huì)類(lèi)似問(wèn)題。
如果不是以上原因需要自己定位下,停止前cat下pid文件值,運(yùn)行 ps auxf 看下進(jìn)程樹(shù),看下是否對(duì)應(yīng)。stop后 ps auxf 看下進(jìn)程樹(shù)是否正確。