systemd 是 Enterprise Linux 第 7 版開始正式引進使用,有許多較以往不同的特點,下表整理了傳統 init 與 systemd 的主要差異:
功能/特性 | systemd | init |
---|---|---|
啟動速度 | 使用平行處理,啟動速度更快 | 依順序啟動,可能較慢 |
服務相依性管理 | 自動處理服務相依性 | 需要手動設定 Script 以管理相依問題 |
日誌系統 | 內建 journald , 提供日誌功能 |
依賴於獨立的 syslog 服務 |
設定與管理 | 使用 systemctl 和 Unit 檔,更易於管理 |
使用不同層級的 init 指令稿 (Script) |
擴展性 | 可以自定義 Unit 檔 | 通常需要修改或增加 Script |
我們可以從表上看到幾個明顯的差異,尤其是系統開機的程序改善了以往依順序啟動服務的流程,這減低了系統開機時間,同時也可以充份利用現代多 CPU 核心的資源。
下圖展示了部份 systemd 開機時間軸表現:
systemd 啟動時間軸 |
---|
對於系統管理員來說,systemd 的主要特性與影響情境如下整理:
平行啟動systemd
利用平行處理來快速啟動服務。例如,若有一個 Web 服務和一個資料庫服務,而 Web 服務依賴於資料庫,則 systemd
會首先啟動數據庫服務,並且在資料庫服務成功啟動後再啟動 Web 服務,而不會等待其他不相關的服務。
相依性管理
在維護過程中,我們經常需要停止或啟動某些依賴於其他服務的服務。使用 systemd 的單位檔,我們可以清晰的定義這些相依關係,使管理更為簡單。比如,當我們需要進行資料庫升級時,可以方便地停止相依於它的所有其他服務,進行升級,然後再啟動所有相關服務。
內建日誌系統journald
是 systemd
的一部分,它不僅收集核心日誌,還收集用戶空間的日誌,這對於故障排除非常有用。假如一個服務無法啟動,使用 journalctl
可以迅速找出失敗的原因。
設定和管理方便
在 systemd
中,管理服務只需要簡單的 systemctl
指令。比如,要停止一個名為 httpd
的 Web 服務,你只需執行 systemctl stop httpd
。這遠比編輯 init 腳本來得直接和簡單。在配置新服務時,只需要添加或修改單位檔,然後重新載入設定即可。
從以上的幾個重點項目來看,systemd
提供了一個更現代、更高效的方法來管理 Linux 服務和資源,對於系統管理員來說,掌握 systemd
會使工作更為便捷。