跳轉到

建立 2026-09-14 更新 2026-09-14

systemd 與 systemctl

systemd 是現代 Linux 的系統與服務管理器:開機、服務、掛載點、排程計時器都經它協調。systemctl 則是你跟 systemd 說話的主要指令。

可以把 systemd 想成引擎,systemctl 想成儀表板:啟動、停止、查看狀態,都透過儀表板操作引擎。

服務的生命週期

一個服務(unit)常見狀態:未啟動、正在跑、失敗、開機自動啟動或否。日常就這幾條:

systemctl status nginx
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
sudo systemctl reload nginx
sudo systemctl enable nginx
sudo systemctl disable nginx
指令 作用
status 目前狀態、最近 log、是否 enabled
start / stop 現在啟動或停止
restart 停再啟,設定檔大改常用
reload 盡量不中斷連線就重載設定(服務要支援)
enable / disable 開機要不要自動啟動(不影響「現在」是否在跑)

enable 不會順便 start。剛裝完套件若要立刻用,通常兩行都要:

sudo systemctl enable --now nginx

--now 等於 enable 加上立刻 start。

看懂 status

systemctl status ssh

重點看:

  • Active: active (running) 正在跑
  • Active: failed 啟動失敗,往下看紅字與 log
  • Loaded: enabled 開機會自動啟動
  • 區塊裡的 journal 片段,常已包含失敗原因

完整 log 用:

journalctl -u nginx
journalctl -u nginx -e
journalctl -u nginx -f

-u 指定服務、-e 跳到結尾、-f 持續追蹤。更多見 日誌

列出服務

systemctl list-units --type=service --state=running
systemctl list-unit-files --type=service

名稱通常以 .service 結尾,輸入時可省略,例如 nginx 等於 nginx.service

什麼時候不該亂 restart

  • 資料庫、佇列:restart 會中斷連線與進行中的工作
  • 改完設定可先 systemctl cat 服務名 或看 /etc 裡的設定,確認路徑無誤再 reload
  • 自己寫的 unit 放 /etc/systemd/system/,改完要 sudo systemctl daemon-reload 才會被讀到

權限

status 通常不需要 sudo;改狀態(start/stop/enable)需要。

總結

systemd 在背景管服務;你用 systemctl 查狀態、開關機自動啟動。失敗時 status 加上 journalctl -u 服務名 就是標準除錯路徑。