Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學

Linux systemd 完整管理指南:服務控制、開機自啟、日誌查詢與單元檔結構詳解

編輯:Linux 系統常見問題解答

前言

systemd 是現代 Linux 發行版(CentOS 7+、Ubuntu 16.04+、Debian 8+、RHEL 7+)預設的初始化系統與服務管理器。本文整理核心指令、單元檔結構、日誌管理等實務操作。

一、修改設定後重新載入與重啟服務

# 重新載入 systemd 設定(修改單元檔後必做)
sudo systemctl daemon-reload

# 重啟服務
sudo systemctl restart foobar.service

二、開機服務管理

啟用/停用開機自啟

# 啟用(建立 /etc/systemd/system/multi-user.target.wants/ 軟連結)
systemctl enable test.service

# 停用(移除軟連結)
systemctl disable test.service

# 查詢是否開機自啟
systemctl is-enabled test.service

列出開機自啟服務

ls /etc/systemd/system/multi-user.target.wants/

三、服務管理常用指令

操作指令
啟動systemctl start httpd.service
停止systemctl stop httpd.service
重啟systemctl restart httpd.service
重新載入設定(不中斷服務)systemctl reload httpd.service
查看狀態(含 PID、記憶體、日誌片段)systemctl status httpd.service

四、系統電源控制

systemctl reboot        # 重開機
systemctl poweroff      # 關機斷電
systemctl halt          # 停止 CPU
systemctl suspend       # 待機(記憶體供電)
systemctl hibernate     # 休眠(寫入硬碟)
systemctl hybrid-sleep  # 混合睡眠
systemctl rescue        # 進入救援模式(單用戶)

五、單元 列表與狀態查詢

# 列出正在執行的單元
systemctl list-units

# 列出所有單元(含失效、未載入)
systemctl list-units --all

# 列出失效單元
systemctl list-units --failed

# 列出所有服務類型單元
systemctl list-units --type=service

# 查詢單元檔啟用狀態
systemctl list-unit-files

六、單元檔結構詳細說明

[Unit] 區塊:中繼資料與相依關係

Description=服務簡短描述
Documentation=文件連結
Requires=強相依(失敗則本單元失敗)
Wants=弱相依(失敗不影響本單元)
BindsTo=類似 Requires,但相依單元退出時本單元也停止
Before=啟動順序:在此單元之前啟動
After=啟動順序:在此單元之後啟動
Conflicts=衝突單元(不可同時執行)
Condition=條件判斷(不滿足則跳過,不視為失敗)
Assert=斷言條件(不滿足則回報失敗)

重要:After/Before 僅控制啟動順序,不代表相依關係。相依請用 Requires/Wants。

[Install] 區塊:安裝屬性(enable/disable 行為)

WantedBy=啟用時放入的 target.wants 目錄(如 multi-user.target.wants)
RequiredBy=啟用時放入的 target.required 目錄
Alias=別名
Also=同時啟用的其他單元

[Service] 區塊:服務行為定義(僅 service 類型有)

Type=simple|forking|oneshot|dbus|notify|idle
ExecStart=啟動指令
ExecStartPre=啟動前指令
ExecStartPost=啟動後指令
ExecReload=重新載入指令
ExecStop=停止指令
ExecStopPost=停止後指令
RestartSec=自動重啟間隔秒數
Restart=always|on-success|on-failure|on-abnormal|on-abort|on-watchdog
TimeoutSec=停止等待秒數
Environment=環境變數

七、日誌管理:journalctl

systemd 統一管理核心與服務日誌,單一指令查詢所有日誌。

# 顯示所有日誌(最舊在前)
journalctl

# 即時追蹤(類似 tail -f)
journalctl -f

# 查詢特定服務日誌
journalctl -u httpd.service

# 查詢指定時間範圍
journalctl --since "2024-01-01 00:00:00" --until "2024-01-02 00:00:00"

# 依優先級過濾(0=emerg ... 7=debug)
journalctl -p err

# 輸出 JSON 格式
journalctl -o json

日誌設定檔:/etc/systemd/journald.conf(可調整儲存大小、壓縮、轉發等)。

小結

掌握 systemd 核心指令與單元檔結構,能高效管理現代 Linux 服務生命週期。建議將常用指令整理成個人 Cheat Sheet,遇到問題快速查閱 man systemd.unit、man systemd.service 等手冊頁。

Copyright © Windows教程網 All Rights Reserved