在 Linux 的演進過程中,初始化系統(init system)一直扮演著非常重要的角色。它是負責控制和管理系統啟動過程中的各項任務和服務。傳統的 SysV init 是長期以來被多數的 Unix 系統所採用的初始化系統。然而,隨著雲端運算、容器技術和現代硬體的快速進步,SysV init 的一些設計和特性開始顯得有些陳舊和不足。
這促使了 systemd 的誕生。systemd 不僅提供了更加高效、快速的系統啟動方式,還提供了許多現代化的功能和特性,如同時啟動服務、系統資源控制、對錯誤的更好反應等。除此之外,systemd 的設計理念也更偏向於集中管理,將多個功能和元件都整合在一起,提供一個一致性的操作界面。這不僅簡化了系統管理的工作,也大大提高了系統的運行效率。
因此,從 Enterprise Linux 7 開始,多數的 Linux 發行版選擇放棄傳統的 SysV init,改用 systemd 作為默認的初始化系統。這一轉變不僅體現了技術的演進,也代表了 Linux 社群對於更好、更現代化的系統管理工具的追求。
在 Linux 的世界裡,服務管理一直是系統管理的重要任務之一。服務,或稱為背景服務(daemons),常常是系統啟動時就開始運行,負責處理網路請求、日誌記錄、硬體互動等工作。
在 Enterprise Linux 7 開始,systemd
成為了系統的主要初始化系統,取代了傳統的 SysV init 系統。systemd
不僅僅是一個初始化工具,它還提供了許多其他功能,例如管理 User Sessions、硬體、網路等。
其中,管理系統服務的主要工具是 systemctl
。不同於傳統的 SysV init 系統,systemctl 提供了一個統一的方式來管理服務。您不再需要記住各種繁瑣的命令,只需要使用 systemctl
加上一些簡單的參數就可以完成大部分的服務管理工作。
以下是一個簡單的比較表,描述了如何使用 systemctl
和傳統的 SysV init 命令來執行一些常見的服務管理任務:
功能 | Systemd (使用 systemctl ) |
SysV init |
---|---|---|
啟動服務 | systemctl start [service] |
service [service] start |
停止服務 | systemctl stop [service] |
service [service] stop |
重新啟動服務 | systemctl restart [service] |
service [service] restart |
查看服務狀態 | systemctl status [service] |
service [service] status |
啟用自動啟動 | systemctl enable [service] |
chkconfig [service] on |
禁用自動啟動 | systemctl disable [service] |
chkconfig [service] off |
查看所有服務狀態 | systemctl list-units --type=service |
chkconfig --list |
查看活動日誌 | journalctl -u [service] |
查看 /var/log/ 目錄相關日誌 |
重新載入服務設定 | systemctl reload [service] |
service [service] reload |
立即停止並禁用服務 | systemctl mask [service] |
無直接對應功能 |
Systemd 和其 systemctl
工具主要在提供更靈活且強大的服務管理功能。它能更好地管理服務的相依性,提供了更多的診斷工具,並允許系統管理員更加精細地控制系統服務的行為。
為了具體說明 systemctl
如何管理服務,我們將使用 httpd
服務作為示範。httpd
是 Apache HTTP 伺服器的服務名稱,在多數 Linux 發行版中都能找到。
透過下列方式可以安裝 httpd
並演練本節技巧:
student$ sudo dnf install -y httpd
完成套件安裝後,我們就可以開始使用 systemctl
操作 httpd
服務了。
以下是一些常見的 systemctl
指令與應用:
啟動 httpd 服務
要啟動一個服務,可以使用 start
參數。對於 httpd
服務,指令如下:
student$ sudo systemctl start httpd
停止 httpd 服務
如果要停止正在運行的服務,可以使用 stop
參數:
student$ sudo systemctl stop httpd
重新啟動 httpd 服務
若需要重新啟動服務以應用設定更改。使用 restart
參數可以達到此目的:
student$ sudo systemctl restart httpd
查看 httpd 服務狀態
status
參數可以幫助我們查看服務的運行狀態,包括是否正在運行、當前的活動狀態以及最近的日誌訊息:
student$ sudo systemctl status httpd
輸出範例如下:
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2023-10-10 09:10:01 UTC; 2h 55min ago
Main PID: 1234 (httpd)
Status: "Total requests: 100; Current requests/sec: 0.5; Current traffic: 5KB/sec"
Tasks: 60 (limit: 512)
CGroup: /system.slice/httpd.service
├─1234 /usr/sbin/httpd -DFOREGROUND
├─1235 /usr/sbin/httpd -DFOREGROUND
└─1236 /usr/sbin/httpd -DFOREGROUND
設定 httpd 服務開機啟動
如果想讓服務在系統啟動時自動運行,我們可以使用 enable
參數:
student$ sudo systemctl enable httpd
禁止 httpd 服務開機啟動
要取消這個設定,則使用 disable
參數:
student$ sudo systemctl disable httpd
重新載入 httpd 服務設定
有時候我們修改了服務設定檔,而不需要重新啟動整個服務的時候,則可以使用 reload
參數讓服務讀取新的設定:
student$ sudo systemctl reload httpd
以上只是 systemctl
與 httpd
服務互動的基礎。為了充分利用這兩者,建議深入閱讀官方文件和相關指引手冊,瞭解更多進階功能和設定選項。