portmap啓動故障解決


在linux上面做NFS、NIS或者是httpd等都需要安裝portmap,但是安裝完portmap之後不能啓動服務。

啓動報錯信息如下:

#service portmap status

portmap dead but subsys locked,翻譯爲portmap進程死掉,系統鎖定。

#service portmap stop

#service portmap start

一切的方法全部用到了,包括百度到的刪除/var/lock/subsys/下的portmap都無效,還是同樣的錯誤信息。無賴之下看日誌文件

/var/log/messages

搜索了一下關於portmap的,顯示如下信息:

Jul 16 16:49:34 portmap[3964]: cannot bind udp: Addressalready in use

Jul 16 16:50:04 portmap[4100]: cannot bind udp: Addressalready in use

Jul 16 16:50:13 portmap[4154]: cannot bind udp: Addressalready in use

字面意思是地址被佔用,初步估計是端口被佔用了,所以不能啓動!

#rpcinfo –p localhost

   program vers proto   port service

   100000   4   tcp    111 portmapper

   100000   3   tcp    111 portmapper

   100000   2   tcp    111 portmapper

   100000   4   udp    111 portmapper

   100000   3   udp    111 portmapper

   100000   2   udp    111 portmapper

   100007   2   udp    953 ypbind

   100007   1   udp    953 ypbind

   100007   2   tcp    956 ypbind

   100007   1   tcp    956 ypbind

看到portmap的啓動端口是111,那麼我們再查看一下到底是哪支程序佔用了111端口,導致端口衝突使得portmap不能啓動。

# lsof -i:111

COMMAND  PID USER  FD   TYPE DEVICE SIZE/OFF NODENAME

rpcbind 4568  rpc  20u  IPv4  25958     0t0  UDP *:sunrpc

rpcbind 4568  rpc  22u  IPv4  25963     0t0  TCP *:sunrpc (LISTEN)

rpcbind 4568  rpc  23u  IPv6  25965     0t0  UDP *:sunrpc

rpcbind 4568  rpc  25u  IPv6  25968     0t0  TCP *:sunrpc (LISTEN)

看到了吧是rpcbind這個罪魁禍首,趕快行動吧!直接kill嗎?NO,仁慈點吧(kill之後估計會有更大的麻煩,爲了這個折騰了N久,重裝過N次的系統,真想直接kill了)。

#service rpcbind stop            直接停止服務

#service portmap start

#service portmap status

portmap (pid 20863) is running...       服務真的啓動了耶

#service rpcbind start    再次啓動rpcbind服務

#service rpcbind status

rpcbind (pid  20956) is running...          兩支服務都啓動了,並且互不相干了。

其實rpcbindportmap是同樣的功能。在centos5及以下版本的時候是portmapcentos6的時候用rpcbind取代了portmap。難怪不的啓動portmap的時候報錯端口被佔用,並且就是rpcbind佔用的。如果你是centos6系統的話沒必要裝portmap了。


Portmap主要是做端口映射服務器,將RPC程序號轉換爲DARPA的協議端口號。在使用RPC調用時它必須運行。

portmap進程的主要功能是把RPC程序號轉化爲Internet的端口號

當一個RPC服務器啓動時,會選擇一個空閒的端口號並在上面監聽(每次啓動後的端口號各不相同),同時它作爲一個可用的服務會在portmap進程註冊。一個RPC服務器對應惟一一個RPC程序號,RPC服務器告訴portmap進程它在哪個端口號上監聽連接請求和爲哪個RPC程序號提供服務。經過這個過程,portmap進程就知道了每一個已註冊的RPC服務器所用的Internet端口號,而且還知道哪個程序號在這個端口上是可用的。portmap進程維護着一張RPC程序號到Internet端口號之間的映射表,它的字段包括程序號、版本號、所用協議、端口號和服務名,portmap進程通過這張映射表來提供程序號-端口號之間的轉化功能。

如果portmap進程停止了運行或異常終止,那麼該系統上的所有RPC服務器必須重新啓動。首先停止NFS服務器上的所有NFS服務進程,然後啓動portmap進程,再啓動服務器上的NFS進程。

但portmap只在第一次建立連接的時候起作用,幫助網絡應用程序找到正確的通訊端口,但是一旦這個雙方正確連接,端口和應用就綁定,portmap也就不起作用了。但對其他任何第一次需要找到端口建立通訊的應用仍然有用。

簡單的說,portmap就是應用和端口的婚姻介紹人,雙方成事了以後,媒婆就沒用了。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章