正確使用Ubuntu systemctl控制Systemd的方法

管理現代 Linux PC 中的服務或服務組可能會很煩人,如果你不確定自己在做什麼的話。幸運的是,Ubuntu Systemctl 為您提供了管理 Linux PC 上服務的解決方案。

在這個教程中,您將學習如何通過運行不同的 systemctl 命令來管理 Ubuntu PC 上的 Systemd 服務。

準備好了嗎?開始吧!

先決條件

這個教程將進行實際演示,但不需要特殊工具,只要您使用的是 Ubuntu 16 或更高版本,您就可以開始了。本教程使用 Ubuntu 20.04.3 LTS 版本進行演示。

什麼是 Ubuntu Systemctl?

在運行 Ubuntu systemctl 命令之前,首先了解一下 Systemctl 是什麼。Systemctl 是一個命令行實用工具,用於控制和管理 systemd 和系統服務。

簡而言之,Systemctl 是一個控制面板或服務管理器,用於在 Linux 內核啟動後初始化 systemd init 系統的組件。Systemctl 是一組可以用來管理服務的庫、守護進程和工具。

要有效地管理服務,請了解以下不同的服務狀態:

  • 啟用 – 表示服務已配置為在系統啟動時啟動。
  • 禁用 – 表示服務已配置為在系統啟動時不啟動。
  • 活動 – 表示服務目前處於運行狀態。
  • 非活動 – 表示服務目前未運行,但在某些應用程序嘗試啟動該服務時可能會啟動。

列出所有服務

現在您已瞭解服務的不同狀態,也許您想要查看您的 Ubuntu 電腦上所有服務的列表。列出所有服務提供了一些信息,為您管理服務做好準備。

打開終端並運行以下命令以列出所有服務單元(活動的、運行的、退出的或失敗的),並將服務設置為單元類型(--type=service)。

systemctl list-units --type=service

從列表中選擇您稍後在本教程中要管理的任何服務,並注意單元名稱(例如,apache2)。按空格鍵向下滾動,或按“Q”鍵退出命令。

順便說一下,這是一份不錯的Linux Shell腳本編寫指南

Listing All Services (active, running, exited, or failed)

列出具有特定狀態的服務

不要列出所有服務,也許你想要縮小服務清單。如果是這樣,添加--state參數就能做到,因為它會過濾掉具有你指定的特定狀態的服務。

執行以下任一命令以列出所有活動服務(--type=service --state=active),包括正在運行和已退出的服務。

systemctl list-units --type=service --state=active
Listing Services on “active” State

同樣地,要僅列出已退出或正在運行的服務,將狀態值從active更改為runningexited,如下命令所示:

systemctl --type=service --state=running
systemctl --type=service --state=exited
Listing Services on “running” State
Listing Services on “stopped” State

列出已啟用的服務

除了列出活動、正在運行和已退出的服務外,您還可以通過將grep命令串聯來列出已啟用和已禁用的服務。

執行以下任一命令以列出(list-unit-filesdisabledenabled服務(--type=service)。

## 列出所有已啟用的服務
systemctl list-unit-files --type=service | grep enabled
## 列出所有已禁用的服務
systemctl list-unit-files --type=service | grep disabled

請注意啟用的服務,如下所示,稍後您需要它來停用服務,但本教程使用 acpid.service 進行演示。acpid 是一個可擴展的守護程序,支持進階配置和電源接口(ACPI)事件。

Listing Enabled Services

列出服務屬性

除了列出服務外,您可能還想檢查服務的屬性。瞭解服務屬性對於故障排除、進程參數或重新啟動行為很有用。

運行以下命令以顯示服務(acpid.service)的屬性,以 key=value 格式顯示。

systemctl show acpid.service
Showing Service Properties

現在,如果您只想查找特定的服務屬性,可以使用 -p 標誌並提供屬性名稱。

運行以下命令以顯示服務(acpid.service)的MainPID屬性。

systemctl show acpid.service -p MainPID
Showing Specific Service Property

管理特定服務

既然已經介紹了列出服務的基礎知識,現在是時候通過運行systemctl stopstart命令來管理特定的(單個)服務了。

Apache服務(apache2)用於以下演示,但您可以自由地管理您在“列出所有服務”部分中指定的服務。但在停止或啟動服務之前,您需要先驗證服務的狀態。

在終端上運行以下命令,以查看apache2服務的詳細信息,例如其狀態

systemctl status apache2

如下所示,您可以看到apache2服務是活動的並正在運行。

Viewing apache2 Service Status

查看服務狀態時不需要輸入sudo密碼,因為您沒有更改服務狀態。但是,如果您啟動、停止或重新啟動服務,則必須添加sudo命令並輸入sudo密碼。

停止服務

也許您想停止一個被留下並仍在後台運行的服務。在這種情況下,systemctl stop命令是您需要的。運行以下systemctl命令來停止apache2服務。

sudo systemctl stop apache2

如果您希望同時停止多個服務,請按空格分隔指定每個服務,例如:sudo systemctl stop sshd apache2。在此命令中,您將一次停止sshd和apache2服務。

現在運行systemctl status命令,就像您之前所做的那樣,以驗證apache2服務是否已停止。

systemctl status apache2

您可以看到下面apache2服務的狀態已更改為停止(無法使用),這表示服務已停止。

Verifying if apache2 Service is Stopped

啟動服務

現在,如果您注意到服務根本沒有運行,該如何啟動服務呢?您可以運行類似停止服務的命令,即systemctl start命令。執行以下命令以start apache2服務。

sudo systemctl start apache2

與停止多個服務一樣,您也可以在單行命令中啟動多個服務。將stop命令替換為start命令,如下所示:sudo systemctl start sshd apache2

現在再次運行systemctl status命令,以驗證apache2服務是否正在運行。

systemctl status apache2

如果您看到如下所示的active (running)狀態,那麼您已準備就緒,因為服務已經重新啟動。

Starting apache2 service

如果您喜歡立即重新啟動服務,而不必首先停止它。如果是這樣,請使用systemctl restart命令,如下所示:sudo systemctl restart apache2

啟用或停用服務

也許有一個特定的服務,您希望在系統啟動時啟動或阻止啟動。如果是這樣,運行systemctl enabledisable命令是最好的方法。

enable子命令讓您配置系統的默認啟動設置,而disable子命令則阻止服務在系統啟動時運行。

執行以下命令以禁用您在“列出已啟用服務”部分中注意到的服務(`acpid.service`)。輸入您的sudo密碼以授權執行該命令。

sudo systemctl disable acpid.service
Disabling a Service

現在由於`acpid.service`支援OS定向配置和電源管理(OSPM);您需要重新啟用它。啟用服務的命令與禁用服務的命令類似。

執行以下命令以啟用`acpid.service`。該命令將服務註冊回系統的默認啟動設置。

sudo systemctl enable acpid.service
Enabling a Service

結論

在本教程中,您已經意識到通過運行Ubuntu的`systemctl`命令,您可以快速停止、啟動或重新啟動服務。您還了解到`systemctl`命令不僅讓您管理一個服務,而且可以同時管理多個服務。

憑藉這些新發現的知識,為什麼不自動化控制您Ubuntu系統中的服務呢?

Source:
https://adamtheautomator.com/ubuntu-systemctl/