systemctl 服務管理:完整的 systemd 操作指南 文章首圖

systemctl 服務管理:完整的 systemd 操作指南

systemctl 服務管理:完整的 systemd 操作指南

在現代 Linux 發行版中,systemd 已經取代了傳統的 SysVinit 成為主要的初始化系統與服務管理器。對於系統管理員而言,掌握 systemctl 指令是日常維護的核心技能。這篇文章將深入解析 systemctl 的常用操作,並提供在 Ubuntu 22.04 和 Debian 12 上可直接執行的範例,幫助你快速上手。

檢視服務狀態與資訊

管理服務的第一步是了解其當前狀態。systemctl status 是最常用的指令,它不僅顯示服務是否運行(active),還會輸出最近的日誌片段,有助於即時除錯。

# 檢視 sshd 服務的詳細狀態
sudo systemctl status sshd

# 輸出範例
● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2023-10-23 10:00:00 UTC; 2h ago
   Main PID: 1234 (sshd)
      Tasks: 1 (limit: 4915)
     Memory: 2.1M
        CPU: 15ms
     CGroup: /system.slice/ssh.service
             └─1234 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"

若只需簡短狀態,可使用 is-active 搭配 echo $? 判斷,適合用於腳本自動化檢查:

systemctl is-active sshd
# 若回傳 "active" 則回傳值為 0,否則為非 0

啟動、停止與重新載入配置

當你需要變更服務的運行狀態時,可以使用 startstoprestart。值得注意的是,修改了服務配置文件(如 /etc/systemd/system/ 下的 .service 檔案)後,必須執行 daemon-reload 讓 systemd 重新讀取配置,否則變更不會生效。

# 1. 重新載入所有服務配置文件
sudo systemctl daemon-reload

# 2. 停止 nginx 服務
sudo systemctl stop nginx

# 3. 重新啟動 nginx 以套用新配置
sudo systemctl restart nginx

對於網路服務,有時僅需重新讀取配置而不中斷連線,此時可使用 reload

# 僅重新讀取配置,不中斷現有連線
sudo systemctl reload nginx

設定開機自動啟動

確保關鍵服務在系統重啟後自動運行是系統管理的重點。enabledisable 指令用於控制服務的開機啟動狀態,這通常透過建立符號連結(symlink)到 /etc/systemd/system/ 來實現。

# 啟用 nginx 開機自動啟動
sudo systemctl enable nginx

# 禁用 nginx 開機自動啟動
sudo systemctl disable nginx

# 確認是否已啟用
systemctl is-enabled nginx
# 輸出範例:enabled

管理服務群組與掛載點

systemctl 不僅能管理服務,還能管理 mount 點、socket 連接器等。你可以使用 list-units 來篩選特定類型的單元。

# 列出所有正在運行的服務
systemctl list-units --type=service --state=active

# 列出所有已掛載的文件系統
systemctl list-units --type=mount

# 檢視特定 mount 點的狀態
systemctl status mnt-data.disk

此外,systemctl cat 可以顯示服務的完整配置文件內容,對於理解服務依賴關係極有幫助:

# 顯示 nginx.service 的完整配置內容
systemctl cat nginx.service

常見問題與除錯

1. 服務狀態顯示 "inactive (dead)" 但無法啟動?

這通常是由於配置文件語法錯誤或依賴服務未啟動所致。請使用 journalctl 檢視詳細錯誤訊息:

# 檢視最近 50 行的系統日誌,過濾 nginx 相關錯誤
sudo journalctl -u nginx -n 50 --no-pager

2. 如何防止服務開機自動啟動?

除了使用 disable,有時需要同時禁用並停止服務,確保當前也處於停止狀態:

sudo systemctl disable --now nginx
# 此指令等同於同時執行 disable 和 stop

小結

systemctl 是 systemd 生態系統的核心指令,透過熟練掌握 statusenabledaemon-reload 等指令,你能高效地管理 Linux 系統的各種服務。建議在生產環境中操作前,先於測試環境驗證配置變更,並善用 journalctl 進行日誌分析,以確保系統穩定運行。