VPS 出問題時,很多新手第一個反應是「重開機看看」。有時候會恢復,但你其實不知道問題是什麼。比較好的方式是先看是哪個服務失敗、日誌寫了什麼,再決定要改設定、重啟服務,還是安排維護。
這篇教你用 systemctl 與 journalctl 做基本服務排查。這是 Linux 管理中非常實用的一組工具。
你會先搞懂這幾件事
systemctl status:看服務目前狀態。systemctl restart:重啟服務,不等於重開整台主機。journalctl -u:看指定服務的日誌。systemctl --failed:看目前有哪些服務失敗。- 改設定後要先測試設定檔,再重啟服務。
先看服務狀態
systemctl status nginx
systemctl status ssh
systemctl status docker
常見狀態:
| 狀態 | 意義 |
|---|---|
active (running) | 服務正在執行 |
inactive | 服務沒有啟動 |
failed | 服務啟動失敗或執行中出錯 |
enabled | 開機會自動啟動 |
disabled | 開機不會自動啟動 |
如果服務是 failed,不要只看紅字,往下看錯誤訊息與最近日誌。
看指定服務日誌
journalctl -u nginx --since "1 hour ago"
journalctl -u ssh --since today
journalctl -u docker -n 100
常用方式:
| 指令 | 用途 |
|---|---|
journalctl -u nginx | 看 Nginx 服務日誌 |
journalctl -u nginx -n 100 | 看最後 100 行 |
journalctl -u nginx -f | 即時追蹤 |
journalctl -u nginx --since today | 看今天以後 |
journalctl -p err -b | 看本次開機的錯誤等級日誌 |
日誌不是要整段貼上就結束。你要找的是:
- 哪個檔案或設定出錯。
- 哪個 port 被占用。
- 權限是否不足。
- 服務是否找不到檔案。
- 是否因為記憶體或磁碟空間不足而失敗。
重啟服務與重新載入設定
sudo systemctl restart nginx
sudo systemctl reload nginx
sudo systemctl restart php8.3-fpm
restart 會重啟服務;reload 通常是重新載入設定但不中斷整個服務,是否支援要看服務本身。
Nginx 改設定前,建議先測試:
sudo nginx -t
PHP-FPM 版本要看你實際環境,不一定是 php8.3-fpm。可以先查:
systemctl list-units --type=service | grep php
檢查哪些服務失敗
systemctl --failed
這個指令很適合在主機重開後或服務異常時先跑一次。
如果看到失敗服務,可以接著:
systemctl status 服務名稱
journalctl -u 服務名稱 -n 100
先看原因,再決定下一步。
開機自動啟動
sudo systemctl enable nginx
sudo systemctl disable nginx
enable 代表開機自動啟動,不代表現在立刻啟動。現在要啟動用:
sudo systemctl start nginx
常見組合:
sudo systemctl enable --now nginx
代表開機自動啟動,並且現在也啟動。
常見錯誤怎麼判斷
| 日誌線索 | 可能原因 |
|---|---|
address already in use | port 已被其他服務占用 |
permission denied | 檔案或目錄權限不足 |
no such file or directory | 設定檔路徑、憑證或檔案不存在 |
syntax error | 設定檔語法錯 |
out of memory | 記憶體不足,被系統終止 |
no space left on device | 磁碟空間滿了 |
遇到錯誤時,先把「服務名稱、錯誤時間、日誌片段、最近改過什麼」整理起來,排查會快很多。
下一步
如果你的正式網站服務反覆 failed,不要只靠重開機壓過去。可以先把 systemctl status 與 journalctl -u 的重點整理好,再到 聯絡我們 取得協助。