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