Linux 伺服器系統管理第七章 行程管理  上一頁    下一頁

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 稱此監督程式為 DaemonSysV 提供『獨立模式』(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/ 目錄下得的服務程式。

# ls  /usr/lib/systemd/system

abrt-ccpp.service                        numad.service

abrtd.service                            oddjobd.service

abrt-oops.service                        packagekit-offline-update.service

abrt-pstoreoops.service                  packagekit.service

abrt-vmcore.service                      paths.target

abrt-xorg.service                        plymouth-halt.service

accounts-daemon.service                  plymouth-kexec.service

alsa-restore.service                     plymouth-poweroff.service

alsa-state.service                       plymouth-quit.service

alsa-store.service                       plymouth-quit-wait.service

anaconda-direct.service                  plymouth-read-write.service

(B) /run/systemd/system/系統執行中產生的服務程式,會隨著原程式結束而結束。

# ls /run/systemd/system

session-1.scope  session-1.scope.d  session-c1.scope  session-c1.scope.d

(C) /etc/sysconfig/各服務的監督檔案(許多已不再使用)

# ls /etc/sysconfig

atd           firewalld         libvirt-guests   qemu-ga        samba

authconfig     grub          man-db           radvd       saslauthd

autofs        init           modules          raid-check     selinux

cbq          ip6tables-config  netconsole       rdisc     smartmontools

cgred        iptables-config   network         readonly-root  sshd

console      irqbalance        network-scripts  rpcbind     sysstat

….

(D) /etc/systemd/system/系統啟動時,執行的服務程式,有點像以前 runlevel /etc/rc0.d/ ~ /etc/rc6.d/ 底下的服務程式,但現在已沒有分等級了。(可利用 setup 命令選擇)

# ls  /etc/systemd/system

basic.target.wants                          getty.target.wants

bluetooth.target.wants                       graphical.target.wants

dbus-org.bluez.service                       multi-user.target.wants

dbus-org.freedesktop.Avahi.service           printer.target.wants

dbus-org.freedesktop.ModemManager1.service  remote-fs.target.wants

….

7-6-3 服務的類型

早期 SysV 將比較小的服務程式歸納由 Super Daemon 來監視,新版本拋棄它之後,即將服務區分多個類型,方便管理與監督執行。由 /usr/lib/system/system/ 目錄下可以觀察到服務程式的命名是『名稱.類型』(name.unit),譬如:

# ls /usr/lib/systemd/system  | grep  ^atd*

atd.service               [service 類型]

各服務類型說明如下:

  • [.service]:服務類型(service unit)。最普遍的服務程式,一般伺服器皆屬於此類型。

  • [.socket]:插槽類型(socket unit)。透過 socket 掃描通訊連結的服務。

  • [.target]:目標類型(target unit)。它屬於依照某一目的,整合多個服務程式成為一只服務的類型,

  • [.mount/automount]:掛載類型(mount unit):以掛載檔案系統相關的服務。

  • [.path]:路徑類型(path unit)與搜尋與偵測檔案系統路徑有關的服務。

  • [.time]:時間類型(time unit)與時間或週期性有關的服務。

各類型的監督掃描方式有所不同,它們之間的運作方式,需再參閱其他書籍瞭解。

翻轉工作室:粘添壽

 

Linux 伺服器系統管理 - CentOS:

 

 

 

翻轉電子書系列: