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。剛裝完套件若要立刻用,通常兩行都要:
--now 等於 enable 加上立刻 start。
看懂 status
重點看:
- Active: active (running) 正在跑
- Active: failed 啟動失敗,往下看紅字與 log
- Loaded: enabled 開機會自動啟動
- 區塊裡的 journal 片段,常已包含失敗原因
完整 log 用:
-u 指定服務、-e 跳到結尾、-f 持續追蹤。更多見 日誌。
列出服務
名稱通常以 .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 服務名 就是標準除錯路徑。