認識系統(tǒng)服務(wù) daemons
2024-07-21 02:37:11
供稿:網(wǎng)友
什么是 daemon
假如您經(jīng)常上網(wǎng)去查看一些資料的話,尤其是關(guān)于 Unix-Like 的相關(guān)作業(yè)系統(tǒng),如 FreeBSD, Unix, linux 等等,應(yīng)該會經(jīng)常聽到 daemons 這個字眼,那么 daemon 是什么東西呀!?怎么這么常被見到?呵呵,Daemon 的字面上的意思就是『守護神、惡魔? 』還真是有點希奇呦! ^_^"" 。基本上,我們的 Linux 主機經(jīng)常會收到一些要求,不論是來自本機系統(tǒng)的要求或者是網(wǎng)路 Client 端的服務(wù)要求,反正只要有要求來的時候,通常就是各式各樣的 daemons 負責(zé)去喚起應(yīng)該要工作的 Servers 來工作啦!那么 daemons 目前有兩種基本的模式,分別是 stand_alone 與 super daemon 兩種方式,底下就來說一說這兩種 daemon 的工作型態(tài):
· stand_alone : 就字面上的意思來說,stand alone 就是『獨立的啟動』的意思,也就是說,該 daemon 啟動之后,就直接常駐在記憶體當(dāng)中啰!他雖然會一直的占用系統(tǒng)的資源,但最大的優(yōu)點就是,他會一直啟動的啦!所以當(dāng)有要求來的時候,他就會很快速的回應(yīng)啰!經(jīng)常用在這一種 daemon 的網(wǎng)路服務(wù)如常見的 httpd 這一個即是一例!
· super daemon : 相對于 stand alone 的執(zhí)行方式,這一種服務(wù)的啟動方式則是藉由統(tǒng)一的一個 daemon 來負責(zé)喚起該服務(wù)!這一個統(tǒng)一負責(zé)的 daemon 就是 inet 這支服務(wù)啦!而在 Red Hat 7.x 以后則是使用 xinet 這個設(shè)定啰!當(dāng)有網(wǎng)路的服務(wù)要求來的時候,該要求會先送給 inet 這個服務(wù),然后 inet 根據(jù)該網(wǎng)路要求送來的資料封包的內(nèi)容 ( 該內(nèi)容會記錄 ip 與 port ) 來將資料封包送給實際運作的服務(wù)!而該服務(wù)這個時候才會啟動的!最常見到的就是 FTP 這支網(wǎng)路服務(wù)啦!這種最大的優(yōu)點就是當(dāng)沒有資料封包來的時候,該服務(wù)不會一直占據(jù)系統(tǒng)資源 ( 該服務(wù)會在 sleeping 的狀態(tài)吧! ) ,但是相對的,他的反應(yīng)時間也會比較慢,因為還要花費一段時間去『喚醒』該服務(wù)呀!
那么這兩種啟動的方式哪一個比較好呢?見仁見智啦!而且還要看該主機的工作負荷與實際的用途說!例如當(dāng)你的主機是用來作為 WWW 伺服器的,那么 httpd 自然就以 stand alone 的啟動方式較佳!事實上,我們經(jīng)常開玩笑的說明 stand alone 與 super daemon 的情況,以銀行的窗口來作為說明的范例!
· stand alone : 在銀行里面,假設(shè)有一種單一服務(wù)的窗口,例如存錢窗口,所以,當(dāng)你需要存錢的時候,直接前往該窗口,就有『專人』為您服務(wù)啦!
· super daemon : 在銀行里面假設(shè)還有另外一種復(fù)合型態(tài)的窗口,同時提供轉(zhuǎn)帳、資金調(diào)度、提款等等的業(yè)務(wù),那當(dāng)你需要其中一項業(yè)務(wù)的時候,就需要前往該窗口,但是坐在窗口的這個人,拿到你的需求單之后,往后面一丟『喂!那個轉(zhuǎn)帳的仁兄!該你的工作了』那么那個仁兄就開始工作去!然而里頭還有資金調(diào)度與提款等負責(zé)業(yè)務(wù)的仁兄呢?他們在干嘛?嘿嘿!看看報、喝喝茶啰!那么這里就會引出另外一個問題啦!假設(shè)銀行今天的人潮非凡的洶涌,所以這個窗口后面除了你之外還有很多的人!那么想一想,這個窗口是要『一個完成再來下一個』還是『全部都把你們的單據(jù)拿來,我全部處理掉』呢?呵呵!是不是不太一樣?
o multi-threaded:就是我們提到的,全部的客戶之要求都給他拿來,一次給他交辦下去,所以一個服務(wù)同時會負責(zé)好幾個程序。
o single-threaded : 這個就是目前我們『人類的銀行』最常見的方式啦,不論如何,反正一個一個來,第一個沒有處理完之前,后面的請排隊!嘿嘿!所以假如 client 的要求忽然大增的話,那么這些晚到的 client 可得等上一等!
另外,需要注重的是,既然銀行里頭有這兩種窗口同時存在,所以啰,在 Linux 系統(tǒng)里面,這兩種 daemon 是可以同時存在的啦!也就是說,某些服務(wù)可以使用 stand alone 來啟動,而有其他的服務(wù)則可以使用 inet ( 或者是 xinet ) 大致的情況就是這樣啦!了呼!?
OK!這個時候就又發(fā)生了另一個問題啰!那么我怎么知道要將我的資料送到那個窗口去!咦!那個窗口不是有寫說明說他是干嘛用的嗎?!嘿嘿!那個就可以稱做是 port 啦!而負責(zé)的人員就可以稱做 服務(wù) 啦!那么在 Linux 系統(tǒng)里面那個檔案在說明那個窗口與服務(wù)的 ( services and ports ) 對應(yīng)呢?!呵呵!那就是鼎鼎大名的 /etc/services 這個檔案啦!我們?nèi)∫欢谓?jīng)常看到的 port 與相關(guān)服務(wù)的區(qū)段來看一下好了!
[root @test root]# vi /etc/services .... 略 ftp-data 20/tcp ftp-data 20/udp ftp 21/tcp ftp 21/udp ssh 22/tcp # SSH Remote Login PRotocol ssh 22/udp # SSH Remote Login Protocol telnet 23/tcp telnet 23/udp smtp 25/tcp mail smtp 25/udp mail nameserver 42/tcp name # IEN 116 nameserver 42/udp name # IEN 116 domain 53/tcp nameserver # name-domain server domain 53/udp nameserver .... 略 < 該服務(wù)的說明 >
像上面說的是,第一欄為 daemon 的名稱、第二欄為該 daemon 所使用的 port 號碼與其網(wǎng)路資料封包傳送時候的類型,主要為較穩(wěn)定的 tcp 封包與較易破損但較快速之 udp 封包!
舉個例子說,那個 e-mail 的發(fā)信協(xié)定為 smtp 這個服務(wù),而這個服務(wù)的使用之 port 即為 25 啦!就這樣!
· 請非凡注重!雖然有的時候您可以藉由修改 /etc/services 來更改一個服務(wù)的 port 號,不過并不建議如此做,因為很有可能會造成一些協(xié)定的錯誤情況!這里特此說明一番呦!(除非您要架設(shè)一個地下網(wǎng)站,否則的話,使用 /etc/services 原先的設(shè)定就好啦!)
Daemon 的命名規(guī)則:
這個地方也沒有什么好說的啦!呵呵!基本上, Linux 系統(tǒng)里面,只要是 daemon 之類的服務(wù)項目,他的啟動的名稱都會多加上一個 d 字樣!例如我們之前在 熟悉登錄檔 里面提到的 syslog 這個登錄檔服務(wù),他的服務(wù)啟動名稱就是 syslogd 啦!而 例行性命令的建立 當(dāng)中提到的 at, cron 服務(wù)呢?嘿嘿!沒錯,他們的服務(wù)名稱就稱為 atd, crond 啰!這樣了解了嗎?!
系統(tǒng)的 Daemons 放在哪里:
好了!那么我們已經(jīng)知道了 daemon 的作用之后,再來要討論的是,那么他們啟動的 scripts 是放在哪里呀!?呵呵!底下就來說一說啰:
· stand alone : 這個放置在 /etc/rc.d/init.d/ 這個目錄里面,幾乎所有的 RPM 安裝的套件之啟動項目都在這里啦!
· super daemon : 這個工作的那一支服務(wù)其實就是 xinet 或者是 inet 啦!請注重, xinet 也是一個 daemon 呢!他是 stand alone 啟動的,也就是他會一直在監(jiān)聽大家的需求,所以 xinet 的啟動 scripts 寫在 /etc/rc.d/init.d/xinetd 這個 scripts 里面啰!但是掛在這個 daemon 里頭的服務(wù)之設(shè)定項目呢?嗯!就是寫在 /etc/xinetd.conf 與 /etc/xinetd.d/ 這個目錄里面的任何檔案!
/etc/rc.d/init.d/*
OK!先來了解一下 stand alone 的 daemon 是怎么啟動的呢?!很簡單,假如我們要啟動 syslog 這支記錄登錄檔的服務(wù),那么要啟動他的話,就直接下達:
· /etc/rc.d/init.d/syslog start
· service syslog start
亦即是檔名之后加上 start 即可,或者是使用 Red Hat 才有的這個 service script 來進行啟動的功能!假如你還記得我們前幾節(jié)提到過的 shell scripts 的話,那么或許還記得 case ..... esac 這個有選擇性的項目的語法吧!?沒錯!這幾支服務(wù)就是以 bash scripts 里頭的 case 語法寫成的!因此,只要加上后面的參數(shù),如此一來, scripts 就會自動的去找尋執(zhí)行檔來執(zhí)行啰!假如有愛好的話,可以在你的系統(tǒng)里面的該目錄下開一個檔案來觀看一下,就知道如何寫啰!
/etc/xinetd.conf
這個檔案就是設(shè)定 xinet 服務(wù)的參數(shù)檔案啦!
/etc/xinetd.d/*
這個目錄里面的所有檔案就是個別掛上 xinet 的所有服務(wù)啦!例如赫赫有名的 wu-ftpd 及 telnet 與 pop3 等等!
了解一下 xinetd.conf
我們先來看一看預(yù)設(shè)的情況之下, xinet 開啟的情況為何?
# # Simple configuration file for xinetd # # Some defaults, and include /etc/xinetd.d/ defaults { instances = 60 log_type = SYSLOG authpriv log_on_sUCcess = HOST PID log_on_failure = HOST cps = 25 30 } includedir /etc/xinetd.d
service { ... ... }
在上面的預(yù)設(shè)范例當(dāng)中,說明的是:『假如沒有指定的 services ( defaults ) 那么就用 {} 里面的設(shè)定來執(zhí)行之!』正常的情況之下有點像上面例子中的黃色字體所示,那個 <> 里頭的資料我們先來說明一下:注:那個 assign_op 主要有三種形式,分別如下:
= : 表示后面的設(shè)定參數(shù)就是這樣啦!
+= : 表示后面的設(shè)定為『在原來的設(shè)定里頭加入新的參數(shù)』
-+ : 表示后面的設(shè)定為『在原來的參數(shù)舍棄這里輸入的參數(shù)!』
用途不太相同,敬請留意呦!好了!底下再來說一說那些 attribute 與 value !
attribute (功能) assing_op (答應(yīng)的動作) 說明 (范例)
一般設(shè)定項目:
disable yes no 答應(yīng)該 server 可以執(zhí)行或者是不能執(zhí)行! 當(dāng)設(shè)定為 yes 表示該服務(wù)不能執(zhí)行!
socket_type stream dgram raw 當(dāng)連線為 TCP 封包時,則使用 stream 類型 當(dāng)連線為 UDP 封包時,則使用 dgram 類型 raw 代表 se