1. 前言
在使用 Linux 時,常常會遇到想要「檢查服務的狀態」或「列出正在運行的進程」等需求。這時,非常方便的就是 systemctl
指令。
這個指令對應於 Linux 上的啟動系統與服務管理程式「systemd」,能夠執行確認服務(單元)狀態、啟動、停止、重啟以及顯示列表等多種操作功能。
特別是從「systemctl 列表」的角度來看,不僅能夠掌握目前運行中的服務,還能從各種層面檢查被停用的服務、自動啟動設定等整體架構。
本章將先簡單介紹「什麼是 systemctl」,並說明本篇文章能學到哪些內容。
什麼是 systemctl?
systemctl
是一款用於基於 systemd 的 Linux 發行版,能夠控制與查詢服務、目標、掛載點等多種「單元(Unit)」的標準工具。
例如,啟動或停止 Apache(httpd)、SSH 等服務,或是列出其狀態時都會用到這個指令。
systemd 與 systemctl 的關係
systemd 是負責 Linux 啟動程序與服務管理的核心機制,是取代傳統「SysVinit」和「Upstart」等系統的新一代服務管理系統。用來與 systemd 互動的指令行工具就是 systemctl
。
換句話說,若把 systemd 比作指揮中心,systemctl 就是發出指令的「操作員」。
本文能學到什麼?
本篇將針對下列常見問題提供解答:
- 如何查詢目前正在運行的服務清單?
- 如果想要包含未啟動的服務一起列出要怎麼做?
- 如何確認服務是否設定為自動啟動?
- 該如何閱讀列表結果?
為了讓 Linux 新手也能輕鬆上手,文中會搭配詳細的指令範例和輸出解說,歡迎大家閱讀到最後。
2. 用 systemctl 顯示服務列表的方法
在 Linux 系統管理中,快速掌握服務列表是非常重要的。使用 systemctl
指令,不僅能查詢目前啟動中的服務,也可以簡單檢查未啟動服務或自動啟動設定等狀態。
本節將從以下三個重點來說明如何顯示列表:
- 列出目前啟動中的服務
- 列出所有服務(包含未啟動)
- 顯示服務單元檔案列表(包含啟動設定)
2.1 顯示目前啟動中的服務列表
最基本的查詢方式,想要確認目前系統上「正在運行」的服務時,可以用以下指令:
systemctl list-units --type=service
執行後,會顯示目前啟動中的服務清單,包含下列項目:
項目名稱 | 說明 |
---|---|
UNIT | 服務名稱(例:ssh.service) |
LOAD | 是否已載入單元檔案 |
ACTIVE | 服務目前狀態(例:active, inactive, failed) |
SUB | 更細部狀態(例:running, exited, dead) |
DESCRIPTION | 服務說明 |
透過這些資訊,就能判斷像是「nginx 是否正在運行」或「有哪些服務目前啟動中」等狀況。
2.2 包含未啟動服務的完整列表
預設的 list-units
只會顯示目前啟動中的服務。如果想要連未啟動的服務也一併顯示,請加上 --all
參數。
systemctl list-units --type=service --all
加上這個參數後,包括「inactive」或尚未啟動過的服務都會一起列出。
如需更細部篩選,可利用 --state=
參數僅顯示特定狀態。
systemctl list-units --type=service --state=inactive
這樣可以靈活對應「只想查看停止中的服務」等需求。
2.3 檢查服務單元檔案的列表
除了檢查「目前狀態」,如果想要知道有哪些服務已被啟用,或會在開機時自動運行,可以用以下指令:
systemctl list-unit-files --type=service
這個指令會顯示服務單元檔案(設定資訊)列表,並標示啟用/停用狀態(enabled/disabled 等)。
STATE 狀態值 | 說明 |
---|---|
enabled | 開機時自動啟動 |
disabled | 開機時不啟動,需手動啟動 |
static | 依賴其他單元啟動,無法自行設定啟用/停用 |
masked | 明確停用,完全禁止啟動(保護狀態) |
透過這份清單,可以快速掌握「哪些服務會開機自動運行」或「是否有不小心被 masked 的服務」等系統啟動狀態。
3. 使用 systemctl 管理服務的基本操作
systemctl
指令不只用來查詢服務狀態,還能操作啟動、停止、重啟、自動啟動等多種管理功能。本節會介紹 Linux 系統運維常用的基本操作方法。
在日常伺服器管理或排障時,能熟練掌握這些操作十分重要。
3.1 啟動服務
要手動啟動某個服務時,請使用 start
子指令:
sudo systemctl start 服務名稱
例如,啟動 Apache(httpd):
sudo systemctl start httpd.service
這會立即啟動服務,但若想在重啟後仍自動啟動,需搭配後述的 enable
。
3.2 停止服務
停止服務請使用以下指令:
sudo systemctl stop 服務名稱
範例:
sudo systemctl stop sshd.service
停止後,直到明確執行 start
前都不會再運行。
3.3 重新啟動服務
想在設定變更後重新啟動服務時,可以用以下指令:
sudo systemctl restart 服務名稱
範例:
sudo systemctl restart nginx.service
此指令會無論狀態如何,先停止再重新啟動服務。
3.4 查詢服務狀態
查詢服務詳細狀態可用 status
子指令:
systemctl status 服務名稱
範例:
systemctl status mysql.service
這會顯示目前啟動狀態、PID、日誌摘要等,對於排障很有幫助。
3.5 啟用服務自動啟動
如欲設定服務在重開機後自動啟動,請用 enable
:
sudo systemctl enable 服務名稱
範例:
sudo systemctl enable docker.service
設定後,服務會隨系統開機自動啟動。
3.6 停用服務自動啟動
若要取消自動啟動,請用 disable
指令:
sudo systemctl disable 服務名稱
範例:
sudo systemctl disable cups.service
這樣服務就不會在開機時自動啟動。
3.7 查詢自動啟動設定
要確認服務目前是啟用(enabled)還是停用(disabled),可使用 is-enabled
:
systemctl is-enabled 服務名稱
輸出範例:
enabled
即可快速掌握服務的啟動政策。
4. systemctl 的實用選項與進階技巧
systemctl
不僅能完成基本的啟動、停止操作,還支援更進階且便利的管理任務。本節將介紹幾個實用進階功能和選項。
善用這些技巧,能讓 Linux 服務管理更有效率。
4.1 列出服務依賴關係
Linux 中常有某個服務依賴其他單元(服務、掛載點、目標等)的情況。要查詢依賴關係可使用 list-dependencies
:
systemctl list-dependencies 服務名稱
範例:
systemctl list-dependencies nginx.service
這會以階層結構顯示相關單元,對於調查啟動順序或影響關係特別有用。
4.2 顯示單元檔案內容
若需查詢服務的詳細設定內容,可以直接查看單元檔案(.service
)內容:
systemctl cat 服務名稱
範例:
systemctl cat ssh.service
此指令會顯示實際載入的單元檔路徑與內容,有助於確認設定是否有被自訂過。

4.3 重新載入單元檔案
手動修改單元檔案後,需讓 systemctl
重新讀取設定時,請執行:
sudo systemctl daemon-reexec
或更常用的是:
sudo systemctl daemon-reload
這樣 systemd 會重新讀取單元檔,後續操作才會反映變更。若發現設定變更未生效,建議先執行這個指令。
4.4 查詢服務執行日誌(補充)
雖然不是 systemctl
本身,但查詢服務日誌時 journalctl
非常實用:
journalctl -u 服務名稱
範例:
journalctl -u docker.service
可查看服務啟動錯誤、重啟紀錄等,是故障排除時的必備指令。
5. 常見問題與處理方法
使用 systemctl
管理服務時,可能會遇到無法如預期啟動、出現錯誤訊息等狀況。本章會說明常見問題與對應的解決方式,協助您冷靜排解「服務無法啟動」「查狀態找不到原因」等狀況。
5.1 服務無法啟動時的檢查重點
啟動服務時,可能會遇到以下錯誤:
Job for apache2.service failed because the control process exited with error code.
See "systemctl status apache2.service" and "journalctl -xe" for details.
遇到這種情況,建議按以下步驟檢查:
- 檢查狀態
systemctl status 服務名稱
- 查看錯誤日誌
journalctl -xe
- 重新載入單元檔
若剛更改過單元檔案,請執行以下指令:
sudo systemctl daemon-reload
- 檢查埠口衝突
確認有無其他進程已佔用相同埠口:
sudo netstat -tulnp | grep 埠號
5.2 status
指令的錯誤訊息解讀
執行 systemctl status
時,除了狀態,還會一起顯示最後的日誌訊息。例如:
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled)
Active: failed (Result: exit-code) since Fri 2025-04-18 12:00:00 JST; 5s ago
Process: 12345 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=1/FAILURE)
像這樣看到「Active: failed」「status=1/FAILURE」等字樣,就能判斷服務啟動失敗以及出錯的進程編號。
而 Loaded
一行則能查出單元檔案路徑,方便直接找到設定檔。
5.3 服務自動停止的情形
服務雖能啟動但馬上停止,常見原因有:
- 設定檔有誤
- 埠口衝突
- 缺少必要檔案或目錄
- 權限不足
此時可採取以下對策:
- 重新檢查設定檔,並用
nginx -t
或apachectl configtest
驗證 - 用
journalctl -u 服務名稱
查詳細日誌 - 確認所需目錄(例:
/var/run/xxx
)存在,如無請建立
5.4 masked
狀態無法啟動時
執行 systemctl start
時,若遇到以下錯誤:
Failed to start example.service: Unit example.service is masked.
代表服務被設定為 masked
(完全停用),因此無法啟動。要解除請執行:
sudo systemctl unmask 服務名稱
解除後即可用 start
啟動。
6. 總結
在 Linux 上管理服務是日常系統維運不可或缺的一環,而 systemctl
正是這方面的核心指令。無論是「列出服務」還是「操作服務」,都能全面掌握與控制系統狀態。
本文圍繞「systemctl 列表」這個主題,重點介紹了以下內容:
systemctl 指令可做什麼?(回顧)
- 查詢服務列表
- 顯示目前啟動中的服務(
list-units --type=service
) - 包含未啟動服務的完整列表(
--all
或--state=
) - 顯示服務單元檔案及啟動設定(
list-unit-files
) - 服務操作基本功能
- 啟動、停止、重啟、查詢狀態(start / stop / restart / status)
- 設定/查詢自動啟動(enable / disable / is-enabled)
- 進階操作與故障排解
- 查依賴關係、顯示單元檔案、重載設定
- 出錯時查看日誌與狀態排查原因
服務管理最佳實踐
- 操作前先查狀態(務必執行
status
) - 確認自動啟動設定(用
is-enabled
查詢) - 修改設定後務必
daemon-reload
- 故障時用
journalctl
查日誌
在 Linux 運維中,這些細心的確認流程將大大提升服務穩定性與問題解決效率。
進一步學習主題
如果讀完本篇想繼續鑽研,建議進一步查閱以下主題:
- systemd 的 Target(與傳統 runlevel 差異)
- 利用
systemd-timer
設定排程任務 - 自訂單元檔案的製作與擺放方式
7. 常見問題(FAQ)
本節整理了讀者常問有關 systemctl
指令與服務列表的問題及解答,無論是新手還是進階用戶都可作為參考。
Q1. systemctl
和 service
指令有什麼差別?
A1.systemctl
是基於 systemd 的服務管理指令,現今大多數 Linux 發行版(如 Ubuntu、CentOS、Fedora 等)都以它為標準。
相對地,service
是傳統 SysVinit 系統的管理指令,部分發行版為了兼容仍可用,但在 systemd 環境中建議以 systemctl
為主。
Q2. list-units
和 list-unit-files
有什麼不同?
A2.
list-units
會顯示目前已載入(正在運作或曾用過)的單元。list-unit-files
則會顯示所有單元檔及其啟用狀態(enabled/disabled 等)。
也就是說,一個是「現行運作情況」,另一個是「設定檔狀態」的差異。
Q3. static 狀態的服務可以啟動嗎?
A3.
可以,static
狀態的服務可手動用 start
啟動,但無法用 enable
設為開機自動執行。
原因是 static 服務通常由其他單元依賴、並隨其一起啟動。
Q4. masked 狀態的服務無法啟動,怎麼辦?
A4.masked
狀態代表服務已「完全停用」,無法啟動。請先用以下指令解除 mask:
sudo systemctl unmask 服務名稱
解除後即可用 start
啟動服務。
Q5. 有 GUI 工具能查看服務狀態嗎?
A5.
部分發行版有提供如 gnome-system-monitor
、KSysGuard
、Cockpit
等圖形化工具可檢查服務狀態。
不過,若要進行進階操作(啟用/停用等),還是建議用 systemctl
指令。
Q6. 想自訂單元檔案,該放在哪個目錄?
A6.
一般建議放在 /etc/systemd/system/
目錄。編輯完記得執行:
sudo systemctl daemon-reload
之後即可正常用 start
或 enable
進行管理。