【2025年最新】如何使用 systemctl 管理與查詢 Linux 服務狀態(超詳細教學)

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.

遇到這種情況,建議按以下步驟檢查:

  1. 檢查狀態
   systemctl status 服務名稱
  1. 查看錯誤日誌
   journalctl -xe
  1. 重新載入單元檔
    若剛更改過單元檔案,請執行以下指令:
   sudo systemctl daemon-reload
  1. 檢查埠口衝突
    確認有無其他進程已佔用相同埠口:
   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 -tapachectl 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. systemctlservice 指令有什麼差別?

A1.
systemctl 是基於 systemd 的服務管理指令,現今大多數 Linux 發行版(如 Ubuntu、CentOS、Fedora 等)都以它為標準。
相對地,service 是傳統 SysVinit 系統的管理指令,部分發行版為了兼容仍可用,但在 systemd 環境中建議以 systemctl 為主。

Q2. list-unitslist-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-monitorKSysGuardCockpit 等圖形化工具可檢查服務狀態。
不過,若要進行進階操作(啟用/停用等),還是建議用 systemctl 指令。

Q6. 想自訂單元檔案,該放在哪個目錄?

A6.
一般建議放在 /etc/systemd/system/ 目錄。編輯完記得執行:

sudo systemctl daemon-reload

之後即可正常用 startenable 進行管理。

年収訴求