服务启动异常处理
最近遇到兩個奇怪的問題。問題一:部署完一個node服務(wù)后,發(fā)現(xiàn)只有ipv6的端口監(jiān)聽。
問題二:這個node服務(wù)殺不掉。殺掉后,又自動生成一個新的進程。
經(jīng)過查閱資料后發(fā)現(xiàn)如下:
問題一解決:
? ? ? ? ? ? ? ? ? ? ? ? ? ipv6 實際上是可以處理 ipv4 的請求的當 V6ONLY 沒有開啟的時候,反之不然 #if APR_HAVE_IPV6 #ifdef AP_ENABLE_V4_MAPPED ? ?int v6only_setting = 0; #else ? ?int v6only_setting = 1; #endif #endif 在這個函數(shù)中,可以看到如果監(jiān)聽的地址是 ipv6,那么會去設(shè)置 IPV6_V6ONLY 這個 socket 選項, 現(xiàn)在,關(guān)鍵是看 AP_ENABLE_V4_MAPPED 是怎么定義的 在 Linux 中,默認情況下,AP_ENABLE_V4_MAPPED 是 1,那么 服務(wù) 就會直接監(jiān)聽 ipv6, 因為此時 ipv6 的 socket 能夠處理 ipv4 的請求;另外,bind() 系統(tǒng)調(diào)用會對用戶空間的進程透明處理 ipv6 沒有開啟的情況,此時會監(jiān)聽到 ipv4。 而如果我們在編譯 服務(wù) 的時候使用 --disable-v4-mapped 參數(shù)禁止 ipv4 mapped,那么默認情況下, httpd 會分別監(jiān)聽在 ipv4 和 ipv6,而非只監(jiān)聽 ipv6
問題二解決:
這個node服務(wù)是pm2管理的,所以單獨殺掉該進程并不起效。需要殺掉pm2進程。同時刪除.root文件。查看pm2管理的進程pm2 list
ubuntu下自帶node,所以要安裝node注意避免沖突!
轉(zhuǎn)載于:https://blog.51cto.com/jack88/2170498
總結(jié)
- 上一篇: runloop解决Cell上主线程卡顿
- 下一篇: redis服务器防止入侵,加ip,密码限