systemd 負(fù)責(zé)解決系統(tǒng)管理中的很多問題。對(duì)于很多新手來說,對(duì)它可能不夠熟悉。比如,怎樣列出 systemd 的服務(wù),可能就會(huì)讓你想半天。
本文將介紹如何列出 systemd 服務(wù),并解釋它的輸出,以便大家能更容易理解服務(wù)的不同狀態(tài)。
在寫這篇文章的時(shí)候,我假設(shè)你對(duì) systemd 有所了解。但是如果不了解,應(yīng)該也沒什么問題...
如何列出 systemd 中活動(dòng)的服務(wù)
systemd 服務(wù)由 systemctl 命令管理。如果我們不帶任何參數(shù)運(yùn)行 systemctl,它會(huì)默認(rèn)調(diào)用 list-units 子命令,列出各種類型的 systemd 單元,比如服務(wù)(services)、套接字(sockets)、目標(biāo)(targets)等。
但是我們的目的是要列出服務(wù),所以可以使用 --type選項(xiàng)指定單元類型(unit type),如下所示:
systemctl --type=service
是否注意到我沒有指定 list-units 子命令?因?yàn)樗?strong>默認(rèn)的。如果想要按照約定使用,也可以指定。本文后面的部分會(huì)遵循這種約定。
systemctl list-units --type=service
上述兩個(gè)命令輸出是一樣的。默認(rèn)情況下,該命令會(huì)按照字母順序列出已經(jīng)加載且活動(dòng)的服務(wù):
UNIT LOAD ACTIVE SUB DESCRIPTION
accounts-daemon.service loaded active running Accounts Service
acpid.service loaded active running ACPI event daemon
alsa-restore.service loaded active exited Save/Restore Sound Card State
apparmor.service loaded active exited Load AppArmor profiles
apport.service loaded active exited LSB: automatic crash report generation
我們來解釋一下上述輸出中的內(nèi)容:
- UNIT :systemd 單元名稱;
- LOAD :?jiǎn)卧渲梦募欠褚延?systemd 解析;
- ACTIVE :?jiǎn)卧母呒?jí)別狀態(tài)(high level state);
- SUB :?jiǎn)卧牡图?jí)別狀態(tài)。活動(dòng)單元(active unit)可以處于運(yùn)行狀態(tài)(running state)或退出狀態(tài)(exited state),此值取決于服務(wù)類型。
上面的例子,我們可以列出 Linux 系統(tǒng)上加載的服務(wù)。但活動(dòng)的 systemd 服務(wù)可能正在運(yùn)行,也可能已經(jīng)退出(在成功運(yùn)行后)。
列出所有正在運(yùn)行的systemd服務(wù)
活動(dòng)狀態(tài)(active state)也有一個(gè)子狀態(tài)(sub-status),比如正在運(yùn)行(running)、已退出(exited)等。所以,可以在子狀態(tài)中使用 --state 選項(xiàng)。
要列出正在運(yùn)行的 systemd 服務(wù),可以指明 --state=running,如下:
systemctl list-units --type=service --state=running
以下是一個(gè)輸出的例子,列出了正在運(yùn)行的 systemd 服務(wù):
UNIT LOAD ACTIVE SUB DESCRIPTION
accounts-daemon.service loaded active running Accounts Service
acpid.service loaded active running ACPI event daemon
avahi-daemon.service loaded active running Avahi mDNS/DNS-SD Stack
bluetooth.service loaded active running Bluetooth service
bolt.service loaded active running Thunderbolt system service
列出所有已加載的systemd服務(wù),包括非活動(dòng)服務(wù)
默認(rèn)情況下,systemctl 命令只列出已加載且活動(dòng)的服務(wù)。如果要包含非活動(dòng)的 服務(wù),可以使用 --all 選項(xiàng):
systemctl list-units --all --type=service
如下輸出示例:
UNIT LOAD ACTIVE SUB DESCRIPTION
accounts-daemon.service loaded active running Accounts Service
acpid.service loaded active running ACPI event daemon
alsa-restore.service loaded active exited Save/Restore Sound Card State
alsa-state.service loaded inactive dead Manage Sound Card State (restore and store)
anacron.service loaded inactive dead Run anacron jobs
apparmor.service loaded active exited Load AppArmor profiles
列出所有非活動(dòng)的systemd服務(wù)
如果要列出所有非活動(dòng)的 systemd 服務(wù),可以使用 --all 組合 --state 選項(xiàng),如下:
systemctl list-units --all --type=service --state=inactive
如下為結(jié)果的輸出,只列出了非活動(dòng)的 systemd 服務(wù):
UNIT LOAD ACTIVE SUB DESCRIPTION
alsa-state.service loaded inactive dead Manage Sound Card State (restore and store)
anacron.service loaded inactive dead Run anacron jobs
apport-autoreport.service loaded inactive dead Process error reports when automatic reporting is enabled
apt-daily-upgrade.service loaded inactive dead Daily apt upgrade and clean activities
apt-daily.service loaded inactive dead Daily apt download activities
● auditd.service not-found inactive dead auditd.service
列出所有已安裝的systemd服務(wù)(即使未加載)
每一個(gè) systemd 單元,包括服務(wù)(service),套接字(socket)或者其他的,都會(huì)有一個(gè)單元文件(unit file),所以我們可以利用其單元文件,列出所有已安裝的 systemd 服務(wù):
systemctl list-unit-files --type=service
以下是輸出:
UNIT FILE STATE VENDOR PRESET
accounts-daemon.service enabled enabled
acpid.service disabled enabled
alsa-restore.service static enabled
alsa-state.service static enabled
alsa-utils.service masked enabled
anacron.service enabled enabled
apparmor.service enabled enabled
apport-autoreport.service static enabled
apport-forward@.service static enabled
列出系統(tǒng)啟動(dòng)時(shí)會(huì)自動(dòng)運(yùn)行的 systemd 服務(wù)
要查看系統(tǒng)啟動(dòng)時(shí),會(huì)自動(dòng)運(yùn)行的 systemd 服務(wù),可以使用如下命令:
systemctl list-unit-files --type=service --state=enabled
你可能會(huì)對(duì)上述命令中,指定的狀態(tài)為 enabled 有疑問,這很正常,很多新用戶經(jīng)常會(huì)將服務(wù)的“啟用(enabled)”和“正在運(yùn)行(running)”混淆。
這里,enabled systemd 服務(wù)表示系統(tǒng)啟動(dòng)時(shí)會(huì)自動(dòng)激活該服務(wù)。
以下為輸出:
UNIT FILE STATE VENDOR PRESET
accounts-daemon.service enabled enabled
anacron.service enabled enabled
apparmor.service enabled enabled
autovt@.service enabled enabled
avahi-daemon.service enabled enabled
binfmt-support.service enabled enabled
bluetooth.service enabled enabled
console-setup.service enabled enabled
containerd.service enabled enabled
cron.service enabled enabled
cups-browsed.service enabled enabled
cups.service enabled enabled
dbus-fi.w1.wpa_supplicant1.service enabled enabled
注意到結(jié)果中的 Vendor Preset 一列了嗎?它在前一個(gè)例子中也出現(xiàn)了。
Vendor preset 定義了安裝程序時(shí) systemd 單元的自動(dòng)行為。
假設(shè)我們安裝了一個(gè)新程序 XYZ,它有一個(gè)名為 xyz.service的服務(wù),且 vendor preset狀態(tài)為啟用(enabled),這表示當(dāng)啟動(dòng)系統(tǒng)時(shí),xyz.service將會(huì)被自動(dòng)激活。
如果 vendor preset 設(shè)置為 disabled,則必須手動(dòng)設(shè)置為啟用。一旦啟用,他就會(huì)跟隨系統(tǒng)自動(dòng)啟動(dòng)。
sudo systemd enable xyz.service
顯示某個(gè)特定 systemd 服務(wù)的狀態(tài)
上文我們介紹了幾種列出服務(wù)的方法。那么,怎樣查看某一個(gè)服務(wù)的狀態(tài)呢?
可以使用 systemctl 命令的子命令 status 來查看 systemd 服務(wù)的詳細(xì)信息。使用該命令時(shí),tab 鍵會(huì)補(bǔ)全輸入。
systemctl status
以下是網(wǎng)絡(luò)管理器服務(wù)(network manager service)的例子:
$ systemctl status NetworkManager.service
● NetworkManager.service - Network Manager
Loaded: loaded (/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-07-23 08:12:44 IST; 3h 8min ago
Docs: man:NetworkManager(8)
Main PID: 711 (NetworkManager)
Tasks: 3 (limit: 9157)
Memory: 13.6M
CGroup: /system.slice/NetworkManager.service
└─711 /usr/sbin/NetworkManager --no-daemon
Jul 23 08:12:50 itsfoss NetworkManager[711]: <info> [1595472170.7159] device (wlp58s0): Activation: successful, device activated.
Jul 23 08:12:50 itsfoss NetworkManager[711]: <info> [1595472170.7179] manager: startup complete
Jul 23 08:12:51 itsfoss NetworkManager[711]: <info> [1595472171.5592] manager: NetworkManager state is now CONNECTED_GLOBAL
Jul 23 08:12:52 itsfoss NetworkManager[711]: <info> [1595472172.7973] dhcp6 (wlp58s0): activation: beginning transaction (timeout in 45 seconds)
Jul 23 08:12:52 itsfoss NetworkManager[711]: <info> [1595472172.8017] policy: set 'JioFi3_215810' (wlp58s0) as default for IPv6 routing and DNS
Jul 23 08:12:52 itsfoss NetworkManager[711]: <info> [1595472172.8058] dhcp6 (wlp58s0): option dhcp6_name_servers => 'fe80::a8dc:79ff:fe1b:57fe'
Jul 23 08:12:52 itsfoss NetworkManager[711]: <info> [1595472172.8059] dhcp6 (wlp58s0): state changed unknown -> bound
Jul 23 08:12:59 itsfoss NetworkManager[711]: <info> [1595472179.9251] agent-manager: agent[bdd71d4a66098713,:1.84/org.gnome.Shell.NetworkAgent/1>
Jul 23 11:18:10 itsfoss NetworkManager[711]: <info> [1595483290.7874] manager: NetworkManager state is now CONNECTED_SITE
Jul 23 11:18:11 itsfoss NetworkManager[711]: <info> [1595483291.5893] manager: NetworkManager state is now CONNECTED_GLOBAL
上面例子中,我們可以看到它顯示了很多信息,比如服務(wù)的狀態(tài)、man 手冊(cè)中的頁(yè)碼、內(nèi)存使用情況、進(jìn)程ID等,后面還顯示了服務(wù)的最后的幾個(gè)日志信息。
如果我們要在 shell 腳本中檢查服務(wù)是否處于活動(dòng)(active)狀態(tài),可以使用 is-active 子命令,0 表示已激活(active)。
systemctl is-active application.service
類似的,如果要檢查服務(wù)是否已啟用(設(shè)置為自啟動(dòng)),可以使用 is-enabled 子命令,0 表示已啟用:
systemctl is-enabled application.service
以上就是本次分享全部?jī)?nèi)容,歡迎討論。
審核編輯:劉清
-
Linux系統(tǒng)
+關(guān)注
關(guān)注
4文章
595瀏覽量
27453 -
sub函數(shù)
+關(guān)注
關(guān)注
0文章
3瀏覽量
1020 -
unit技術(shù)
+關(guān)注
關(guān)注
0文章
2瀏覽量
1557
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論