概述
systemd 在有效管理系統啟動過程、監控運行中的服務以及控制系統各種狀態方面扮演著核心角色。與 init 依序執行腳本的方式不同,systemd 根據依賴關係並行處理服務,大幅提升了啟動速度。這是現代 Linux 系統性能與穩定性的重要貢獻因素。
主要特點
systemd 的主要特點如下:
- 並行啟動: 分析服務依賴關係,同時執行多個服務,縮短啟動時間。
- 整合管理: 將系統啟動、服務、設備、日誌等多種元素整合在單一框架下管理。
- 服務監控: 當服務失敗時自動重啟,有助於穩定運行。
- 取代運行級別: 引入了 '目標 (target)' 概念取代運行級別 (runlevel),以控制系統狀態。
與 init 的關係
systemd 是傳統 init 系統的後繼者和替代者。它繼承了 init 負責的系統啟動和關閉角色,並增加了更好的功能。
- init: 第一個執行的進程,在啟動時參考 `/etc/inittab` 文件,根據運行級別依序執行腳本。
- systemd: 同樣是 PID 1 進程,但使用 '目標' 取代運行級別,並根據依賴關係並行處理服務,使其更快速、更靈活。
- 兼容性: 在大多數現代 Linux 系統中,init 通常是 systemd 的符號連結,因此即使使用 init 命令,systemd 也會代為執行。
核心概念
理解 systemd 所必需的核心概念。
單元 (Unit)
systemd 管理的所有對象(服務、掛載點、設備等)都被定義為 '單元'。每個單元都有一個定義特定任務的配置文件(如 `*.service`, `*.mount` 等)。
- Service Unit: 管理網頁伺服器 (nginx.service) 或資料庫 (mysql.service) 等後台進程。
- Target Unit: 用於將多個單元分組。這是取代運行級別的概念,'multi-user.target' 表示多用戶模式,'graphical.target' 表示圖形模式。
- Mount Unit: 管理文件系統掛載點。
systemctl
systemd 的主要命令行工具。用於啟動、停止、重啟服務或檢查單元狀態。
- 啟動服務: sudo systemctl start nginx
- 檢查服務狀態: sudo systemctl status nginx
- 重啟系統: sudo systemctl reboot
journalctl
用於查詢 systemd 整合管理的系統日誌的命令。可以按服務、按時間、按優先級過濾日誌。
- 查看所有日誌: journalctl
- 查看特定服務日誌: journalctl -u nginx.service
- 實時查看日誌: journalctl -f
使用範例
systemd 核心命令 systemctl 和 journalctl 的使用範例。
確認系統啟動目標
systemctl get-default
確認系統是透過哪個目標啟動的。
系統關機
sudo systemctl poweroff
透過 systemd 安全地關閉系統。與 poweroff 命令功能相同。
啟用/禁用特定服務
sudo systemctl enable nginx
sudo systemctl disable nginx
設定特定服務在系統啟動時自動啟動或禁用。
重啟服務
sudo systemctl restart nginx
重啟運行中的網頁伺服器服務。在更改配置文件後很有用。
提示與注意事項
使用 systemd 時值得注意的事項。
提示
- systemd 的單元文件主要位於 `/etc/systemd/system/` 或 `/lib/systemd/system/` 目錄中。
- systemd 整合管理了大部分與啟動/關閉相關的命令。因此,`halt`、`reboot`、`poweroff` 等命令通常是 `systemctl` 的符號連結。
- 使用 `systemctl status` 命令不僅可以查看服務狀態,還可以同時查看最新的日誌。