如何使用 systemctl 列出 Linux 服務
已發表: 2022-10-23您的 Linux 計算機依賴於許多稱為服務或守護程序的後台任務。 在基於 systemd 的發行版上,您有內置命令,可讓您查看哪些服務正在運行、禁用或失敗。
服務和守護進程
服務和守護程序是在沒有用戶界面的情況下運行的後台任務,不需要人工交互,並且通常在計算機啟動時啟動。
有一次,服務由init
,這是第一個啟動的進程。 服務的詳細信息保存在“/etc/init/d”目錄中的一組腳本中。 在非系統發行版上仍然如此。
在 systemd 世界中,服務由systemd
啟動,這是現在要啟動的第一個進程。 服務的詳細信息存儲在“/usr/lib/systemd”目錄中的單元文件中。
根據其手冊頁, systemd
是一個系統和服務管理器。 您可以使用systemctl
命令來檢查和控制 systemd 系統的不同方面,包括服務和守護進程。
因為我們在這裡查看特定於 systemd 的命令,所以您需要知道的第一件事是您是否正在運行基於 systemd 的發行版。
相關:為什麼 Linux 的 systemd 在這麼多年之後仍然存在分歧
init 還是基於systemd?
絕大多數 Linux 發行版都使用 systemd,包括 Arch、Red Hat 和 Debian,以及許多衍生自它們的發行版。 這包括 Ubuntu 系列發行版、Fedora 及其自旋,以及 Manjaro 和其他基於 Arch 的發行版。
但是,這些發行版中有一些分支或風格是專門為避免使用 systemd 而創建的。 不僅如此,人們還可以選擇使用其他 init 系統來代替其發行版中默認提供的系統,例如 runit 或 s6-linux-init。
如果您必須管理一台不是您自己設置的 Linux 計算機,那麼確定它是否使用 systemd 的唯一方法是檢查。 我們可以通過使用pstree
命令查看進程樹來做到這一點。 我們只需要查看樹的最頂端——畢竟我們正在尋找第一個運行的進程——所以我們將通過head
命令管道輸出,並詢問前五個條目。
pstree | 頭-5
我們可以看到systemd
是啟動後運行的第一個進程,因此我們肯定是在基於 systemd 的 Linux 安裝上。
相關:如何從 Linux 終端管理進程:您需要知道的 10 個命令
使用 systemctl 列出服務
列出服務和守護進程的命令是systemctl
。 我們可以使用type
和state
選項來優化systemctl
命令。 我們要求systemctl
報告處於運行狀態的服務。
systemctl --type=service --state=running
生成信息表。 如果它對於您的終端窗口來說太寬或太長,它會顯示在您的默認文件查看器中,這可能會是less
。
要查看表格的右端,請按右箭頭鍵。 要返回通常視圖,請按向左箭頭鍵。
按Q鍵退出less。 顯示的列是:
- Unit :服務或守護進程的名稱。 該列的標題為“Unit”,因為該列中的任何內容都是使用單元文件中的
systemd
信息啟動的。 - Load :服務或守護程序的負載狀態。 它可以被加載、未找到、錯誤設置、錯誤或被屏蔽。
- 活動:服務或守護程序所處的整體狀態。它可以是活動的、重新加載的、非活動的、失敗的、激活的或停用的。
- SUB :服務或守護進程的子狀態。 它可以是死的、退出的、失敗的、不活動的或正在運行的。
- 描述:單位的簡短描述。
如果我們想專注於單個服務,我們可以通過grep
管道輸出systemctl
的輸出。 此命令隔離ssh
服務的表條目。
systemctl --type=service --state=running | grep ssh
到目前為止,我們一直在通過提供state=running
選項來過濾表格的內容。 我們可以使用子狀態的任何可能值來代替:dead、exited、failed、inactive 或 running。
讓我們尋找失敗的服務:
systemctl --type=service --state=失敗
可以使用子狀態的組合。 以逗號分隔的列表形式鍵入它們。 確保您沒有在選項之間包含任何空格。 請注意,這會查找與任一狀態匹配的服務。
systemctl --type=service --state=failed,exited
按右箭頭鍵查看屏幕外的列顯示我們在列表中混合了退出和失敗的服務。
默認情況下, systemctl
會列出由systemd
啟動的進程(服務和守護進程),因為systemd
找到了一個包含有效單元文件的單元文件。 這就是為什麼所有這些過程的簡稱都是“單位”。
有一個選項可以顯式請求systemctl
列出單位,但由於它是默認操作,因此不經常使用。
這些命令產生相同的結果。
sudo systemctl list-units --type=service --state=running
sudo systemctl --type=service --state=running
使用 systemctl 列出單元文件
我們可以通過包含list-unit-files
選項來擴展systemctl
命令的範圍。 這不僅報告已啟動的服務和守護程序,還列出了您計算機上安裝的所有單元文件。
systemctl list-unit-files --state=enabled
顯示彩色表格。
刪除state
選項會刪除過濾。 輸出將包含所有已安裝的單元文件,無論它們的狀態如何。
systemctl 列表單元文件
輸出將包含比先前命令的結果更多的條目。
在我們的測試計算機上,結果列表幾乎是我們之前命令輸出的四倍。
如果你確實想使用state
選項,你可以像我們之前看到的那樣使用多個 state。 相同的規則適用。 以逗號分隔值的形式提供選項,並且不包含任何空格。
此命令將列出所有已禁用或無法啟動的單元文件。
systemctl list-unit-files --state=enabled,失敗
顯示的結果數量減少,根據您使用 state 選項所做的選擇進行過濾。
詳細查看一項服務
如果某項服務或守護程序的某些內容激起了您的興趣並值得深入研究,您可以使用 systemctl status 選項詳細查看它。
讓我們看一下 SSH 守護進程 sshd。 我們需要做的就是使用狀態選項和服務或守護進程的名稱。
systemctl 狀態 sshd
這個緊湊的顯示器顯示:
- 服務的名稱和簡短的描述。 顏色編碼的點顯示它是否正在運行。 綠色表示正在運行,紅色表示未運行。
- 加載了什麼,包括單元文件的路徑。
- 它已經運行了多長時間。
- 文檔位於
man
中的位置。 - 正在運行的實例的進程 ID。
- 此服務有多少並發實例正在運行。 通常這將是一個。
- 正在消耗多少內存。
- 消耗了多少 CPU 時間。
- 服務所屬的控制組。
還會顯示系統日誌中的相關條目。 這些通常是諸如服務啟動之類的事件。 如果您正在查看未正確啟動的服務或守護程序,這些可能會提供信息。
相關:如何使用 journalctl 讀取 Linux 系統日誌
自主系統
服務和守護程序提供了操作系統的許多自動操作,因此它們至關重要。 這意味著他們的健康也很重要。
查看您的服務、守護程序和單元文件很容易,而且信息量很大。 如果服務或守護程序拒絕啟動,這也是一個有價值的故障排除步驟。
相關:如何解決 Linux 上的“打開文件過多”錯誤