portmap啓動故障解決


在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...          兩支服務都啓動了,而且互不相干了。

其實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就是應用和端口的婚姻介紹人,雙方成事了之後,媒婆就沒用了。

相關文章
相關標籤/搜索