1. 程式人生 > >linux中的系統服務--daemon

linux中的系統服務--daemon

有趣 ges mon 等等 分鐘 service xinetd 每分鐘 特殊

簡單的說,系統為了某些功能必須要提供一些服務 (不論是系統本身還是網絡方面),這個服務就稱為 service 。 但是 service 的提供總是需要程序的運行吧!否則如何運行呢?所以達成這個 service 的程序我們就稱呼他為 daemon 啰! 舉例來說,達成循環型例行性工作排程服務 (service) 的程序為 crond 這個 daemon 啦!這樣說比較容易理解了吧!

一般來說,當我們以文本模式或圖形模式 (非單人維護模式) 完整啟動進入 Linux 主機後, 系統已經提供我們很多的服務了!包括打印服務、工作排程服務、郵件管理服務等等; 那麽這些服務是如何被啟動的?他們的工作型態如何?底下我們就來談一談啰!

一、daemon的主要分類:

根據daemon的啟動方式和管理來分為2類:一類是可獨立啟動的stand alone,另一類為通過super daemon統一管理的服務。

1、stand alone:此daemon可以自行單獨啟動服務。

就字面上的意思來說,stand alone 就是『獨立的啟動』的意思。這種類型的 daemon 可以自行啟動而不必透過其他機制的管理; daemon 啟動並加載到內存後就一直占用內存與系統資源。最大的優點就是:因為是一直存在內存內持續的提供服務, 因此對於發生客戶端的要求時,stand alone 的 daemon 響應速度較快。常見的 stand alone daemon 有 WWW 的 daemon (httpd)、FTP 的 daemon (vsftpd) 等等。

2、super daemon:由一個超級服務統一管理的服務

這一種服務的啟動方式則是藉由一個統一的 daemon 來負責喚起服務!這個特殊的 daemon 就被稱為 super daemon 。 早期的 super daemon 是 inetd 這一個,後來則被 xinetd 所取代了。這種機制比較有趣的地方在於, 當沒有客戶端的要求時,各項服務都是未啟動的情況,等到有來自客戶端的要求時, super daemon 才喚醒相對應的服務。當客戶端的要求結束後,被喚醒的這個服務也會關閉並釋放系統資源。

這種機制的好處是: (1)由於 super daemon 負責喚醒各項服務,因此 super daemon 可以具有安全控管的機制,就是類似網絡防火墻的功能啦! (2)由於服務在客戶端的聯機結束後就關閉,因此不會一直占用系統資源。但是缺點是什麽呢? 因為有客戶端的聯機才會喚醒該服務,而該服務加載到內存的時間需要考慮進去,因此服務的反應時間會比較慢一些啦! 常見的 super daemon 所管理的服務例如 telnet 這個玩意兒就是啦!

技術分享

如上所示,Super daemon 是常駐在內存中的, Program 1, 2, 3 則是啟動某些服務的程序 (未被啟動狀態)。當有客戶端的要求時, Super daemon 才會去觸發相關的程序加載成為 daemon 而存在於內存中,此時,客戶端的要求才會被 Super daemon 導向 Daemon 1 去達成聯機!當客戶端的要求結束時,Daemon 1 將會被移除,圖中實線的聯機就會中斷啰!

3、super-daemon的多線程和單線程

multi-threaded多線程:由super-daemon一次分發給多個後臺daemon

single-threaded單線程:由super-daemon一個接一個的排隊處理。

技術分享

二、daemon 工作形態的類型:

如果以 daemon 提供服務的的工作狀態來區分,又可以將 daemon 分為兩大類,分別是:

  • signal-control
    這種 daemon 是透過訊號來管理的,只要有任何客戶端的需求進來,他就會立即啟動去處理!例如打印機的服務 (cupsd)。

  • interval-control
    這種 daemon 則主要是『每隔一段時間就主動的去運行某項工作』,所以,你要作的是在配置文件指定服務要進行的時間與工作, 該服務在指定的時間才會去完成工作。我們在第十六章提到的 atd 與 crond 就屬於這種類型的 daemon 啦 (每分鐘偵測一次配置文件)

另外,如果你對於開發程序很有興趣的話,那麽可以自行查閱一下『 man 3 daemon 』看看系統對於 daemon 的詳細說明吧! ^_^。

三、daemon 的命名守則

每一個服務的開發者,當初在開發他們的服務時,都有特別的故事啦!不過,無論如何,這些服務的名稱被創建之後,被掛上 Linux 使用時,通常在服務的名稱之後會加上一個 d ,例如例行性命令的創建的 at, 與 cron 這兩個服務, 他的程序文件名會被取為 atd 與 crond,這個 d 代表的就是 daemon 的意思。所以,我們使用了 ps 與 top 來觀察程序時,都會發現到很多的 {xxx}d 的程序,呵呵!通常那就是一些 daemon 的程序啰!

linux中的系統服務--daemon