7-6 系統服務
7-6-1 何謂服務? 所謂『服務』?就是某一行程所能完成的特殊功能,而此功能具有共通性可以被其他行程或使用者所引用;當使用者(或其他行程)需要類似的功能時,可呼叫或請求某一行程來完成此功能,一般將此行程稱之為『服務』。基本上,系統內必須存在許多不同的行程,分別提供不同的服務需求。再說建構一套作業系統的目的,是要提供各種介面,讓使用者方便操作電腦;為了達成此目的,作業系統必須提供各式各樣的『服務』(Service)讓使用者使用。簡單的說,『服務』即是提供某種功能的程式,譬如印表列印、磁碟機存取、網頁存取、郵件轉送、甚至關機服務等等。 執行中的系統到底需要哪些服務?這是值得推敲的問題。其實需要哪些服務並沒有一定的規範,而是要看該系統所欲扮演的角色有無絕對性的關係。譬如說,僅要當作一部單人使用工作站,與要當作網路伺服器的系統,他們所欲啟動的服務程式之差異性就非常大。以下將介紹系統所欲執行的模式,應該啟動哪些服務?與應如何啟動。 系統到底安裝了些服務,在何種情況下要啟動哪些服務,早期 Unix system V(SysV) 版本採用 init 啟動方式,它的做法是將所有已安裝的服務程式儲存於 /etc/rc.d/init.d/ 目錄下,系統啟動模式有 runlevel_0 ~ runlevel_6 等七個等級,可依照使用者選擇啟動哪一個等級。啟動哪一個等級,會執行哪一目錄下服務,則在 /etc/inittab 檔案規劃,並將各等級的服務程式儲存於 /etc/rc0.d/ ~ /etc/rc6.d/ 等目錄下,當然這些檔案皆以鏈路(link) 方式,索引到 /etc/rc.d/init.d/ 目錄下檔案。系統啟動時,依照所選定的 runlevel 等級,執行該相對目錄下服務程式後,再執行 /etc/rc.d/local 檔案,該檔案提供除了系統服務之外,其它新增的服務或系統操作命令,譬如增加路由表、防火牆規則等等。 其實,服務程式也是屬於主從式架構(Client/Server Architecture),是被動的,它不停的監督掃描是否有客戶端提出要求,如果有則立即給予服務,因此 SysV 稱此監督程式為 Daemon。SysV 提供『獨立模式』(Stand alone Daemon)與『超級監督』(Super Daemon)等兩種模式,前者是由服務程式自行監督是否有服務需求,後者是利用一只專屬監督程式(xinetd 或 inetd)負責。xinetd 負責多個服務程式,掃描相對應服務埠口(socket Port)發現有服務需求時,再呼叫啟動該相對的服務。 自從 CentOS 7 (RedHat 6 新版本)之後便拋棄了原 SysV 的啟動模式,雖然已沒有 runlevel 等級選擇,但她還是保留有向下相容能力。各 runlevel 執行的程式也將其歸納整合,可選擇不同的 runlevel,其實是執行相同的服務程式。新版本為了應付新的多核心主機架構,認為執行服務程式應該可以拋棄原上下從屬的關係,各服務程式應該可以獨立執行。當然許多情況下,服務程式是有從屬關係,但如發現執行某一程式,必須先執行另一程式時,則再去啟動它就好。如此,就可以讓多個核心同時執行不同的服務程式,如此就可以增加系統的執行速度。因此,新版本不再有 xinetd 超級監督程式,每一個服務程式皆是 Stand alone。 7-6-2 服務相關檔案 系統服務相關檔案: (A) /usr/lib/systemd/system/:系統已安裝的服務程式,有點類似SysV統的 /etc/rc.d/init.d/ 目錄下得的服務程式。
(B) /run/systemd/system/:系統執行中產生的服務程式,會隨著原程式結束而結束。
(C) /etc/sysconfig/:各服務的監督檔案(許多已不再使用)。
(D) /etc/systemd/system/:系統啟動時,執行的服務程式,有點像以前 runlevel 的 /etc/rc0.d/ ~ /etc/rc6.d/ 底下的服務程式,但現在已沒有分等級了。(可利用 setup 命令選擇)
7-6-3 服務的類型 早期 SysV 將比較小的服務程式歸納由 Super Daemon 來監視,新版本拋棄它之後,即將服務區分多個類型,方便管理與監督執行。由 /usr/lib/system/system/ 目錄下可以觀察到服務程式的命名是『名稱.類型』(name.unit),譬如:
各服務類型說明如下:
各類型的監督掃描方式有所不同,它們之間的運作方式,需再參閱其他書籍瞭解。 |
翻轉工作室:粘添壽
Linux 伺服器系統管理 - CentOS:
翻轉電子書系列:
|