在linux上面作NFS、NIS或者是httpd等都須要安裝portmap,可是安裝完portmap以後不能啓動服務。linux
啓動報錯信息以下:centos
#service portmap status服務器
portmap dead but subsys locked,翻譯爲portmap進程死掉,系統鎖定。網絡
#service portmap stopapp
#service portmap starttcp
一切的方法所有用到了,包括百度到的刪除/var/lock/subsys/下的portmap都無效,仍是一樣的錯誤信息。無賴之下看日誌文件ide
/var/log/messagesspa
搜索了一下關於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... 兩支服務都啓動了,而且互不相干了。
其實rpcbind和portmap是一樣的功能。在centos5及如下版本的時候是portmap到centos6的時候用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就是應用和端口的婚姻介紹人,雙方成事了之後,媒婆就沒用了。