1. 程式人生 > >Linux 中守護程序的概念

Linux 中守護程序的概念

轉:http://blog.51cto.com/linuxzoe/572965

在講解xinetd之前,我們先要了解什麼是守護程序。 

   守護程序,也就是通常說的Daemon程序,是Linux中的後臺服務程序。它是一個生存期較長的程序,通常獨立於控制終端並且週期性地執行某種任務或等待處理某些發生的事件。守護程序常常在系統引導裝入時啟動,在系統關閉時終止。Linux系統有很多守護程序,大多數服務都是通過守護程序實現的,同時,守護程序還能完成許多系統任務,例如,作業規劃程序crond、列印程序lqd等(這裡的結尾字母d就是Daemon的意思)。

  由於在Linux中, 每一個系統與使用者進行交流的介面稱為終端,每一個從此終端開始執行的程序都會依附於這個終端,這個終端就稱為這些程序的控制終端,當控制終端被關閉時,相 應的程序都會自動關閉。但是守護程序卻能夠突破這種限制,它從被執行開始運轉,直到整個系統關閉時才退出。如果想讓某個程序不因為使用者或終端或其他地變化 而受到影響,那麼就必須把這個程序變成一個守護程序。

      每個守護程序都會監聽一個埠,一些常用守護程序的監聽埠是固定的,像httpd監聽80埠, sshd監聽22埠等;我們可以將其理解為責任制,時候等待,有求必應。具體的埠資訊可以通過cat /etc/services來檢視。 

      在Linux中,守護程序有兩種方式,一種是svsy方式,一種是xinetd方式(超級守護程序)。 每個守護程序都會有一個指令碼,可以理解成工作配置檔案,守護程序的指令碼需要放在指定位置,獨立啟動守護程序:放在/etc/init.d/目錄下,當然也包括xinet的shell指令碼;超級守護程序:按照xinet中指令碼的指示,它所管理的守護程序位於/et/xinetd.config目錄下。  

sysv:

獨立啟動,一開機執行就會進入記憶體,一直處於listen狀態,即使該守護程序不執行也會一直佔用系統資源,但是其最大的優點就是,它一直啟動,當有請求時會立即響應,響應速度快,比如http服務,這樣的程序都儲存在/etc/rc.d/init.d目錄下

xinet d:

超級守護程序,管理眾多的程序,比如telnet服務。xinetd自己是一個sysv,它就像老闆一樣,自己常駐於記憶體,管理其它的程序,其它程序就相當於它的員工,在其它程序沒有用時會睡眠,並不佔用系統資源,當有工作時候老闆xinetd會通知它的員工,喚醒某個程序來執行作業。這種方式適合於那些不是經常被人使用,不需要常駐記憶體的程式,但是此方式響應時間長,但是節省系統資源,方便管理。超級守護程序的配置檔案是/etc/xinetd.conf,超級守護程序的子程序們存放在/etc/xinetd.d/目錄下   

下面我們來講解一下它的引數:

disable 定義是否啟動{no|yes}no表示開啟,yes表示關閉

socket_type {stream|dgram}表示套接字格式,stream是TCP,dgram為udp

protocol 協議型別,這些是需是/etc/protocol裡可用的

wait 允許併發數,{yes|no}yes單執行緒,no多執行緒

user  執行身份

server 有哪個檔案/程式啟用該服務

server_args  傳遞的引數

only-from 白名單

no-access 黑名單

access-time 定義訪問時間

log-type {SYSLOG|FILE} syslog定義日誌型別,級別;file定義日誌存放位置

bind 監聽ip

log-on-success 記錄登陸成功的資訊

log-on-failure  記錄登陸失敗的資訊

per-source    資源限制,限制某一ip同時連線請求數

phier-source = UNLIMITED表示不做限制

cps = n m 定義美妙最大連線數為n,超出後等待m秒後再嘗試連線

下面我們以telnet服務為例:

server telnet

{

         disable         = no            表示服務已經開啟

         flags           = REUSE        

         socket_type     = stream        表示套接字stream表示TCP,dgream並表示UDP

         wait            = no            no表示為多執行緒服務,yes表示為單執行緒,用於併發連線請求。

         user            = root          以root的身份執行此服務

         server          = /usr/sbin/in.telnetd  定義有哪個程序起啟動此服務,並接受使用者訪問

         log_on_failure  += USERID        表示在預設規則上擴充套件顯示。

         log_type        = FILE /tmp/telnet_log  定義此服務日誌的儲存位置

         bind            = 192.168.0.24   指定監聽IP

         per_source      = 1              指定同一IP允許向此服務最多開啟的連線數

         access_times    = 08:00-19:30    指定可以使用此服務的時間

         cps             = 100 2          表示每秒最多可以有100個使用者連線次服務,超出著等待2s重連

         only_from       = 192.168.0.0/25 表示僅允許192.168.0.0/25網段的計算機連線次服務

每一次配置完成後,都需要重啟xinetd服務,開啟後關閉xinetd的子程序時,可以使用chkconfig SERVER on 和 chkconfig SERVER off 。

幾種能用到的查詢命令

# netstat -tulp             會列出相應的服務及其監聽的埠號等,若加n引數會列出埠號

#chkconfig --list |grep SERVERNAME 會列出現在當前服務的各種狀態,包括在不同執行級別下的啟情況,分為上下兩部分,上部分是獨立啟動的服務,你會看到xinetd也在,下面部分是有inet管理的超級守護程序,沒有執行級別可分的。 

}