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
Description=服務簡短描述
Documentation=文件連結
Requires=強相依(失敗則本單元失敗)
Wants=弱相依(失敗不影響本單元)
BindsTo=類似 Requires,但相依單元退出時本單元也停止
Before=啟動順序:在此單元之前啟動
After=啟動順序:在此單元之後啟動
Conflicts=衝突單元(不可同時執行)
Condition=條件判斷(不滿足則跳過,不視為失敗)
Assert=斷言條件(不滿足則回報失敗)
重要:After/Before 僅控制啟動順序,不代表相依關係。相依請用 Requires/Wants。
WantedBy=啟用時放入的 target.wants 目錄(如 multi-user.target.wants)
RequiredBy=啟用時放入的 target.required 目錄
Alias=別名
Also=同時啟用的其他單元
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=環境變數
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 等手冊頁。