systemdはシステム管理に関する多くの問題を解決しますが、混乱を招くこともあります。
systemdサービスを一覧表示するような単純なタスクでも、考えさせることができます。
この記事では、systemdサービスを一覧表示する方法を紹介します。また、サービスのさまざまな状態を理解しやすくするために、出力についても説明します。
systemdについてある程度の知識があると思いますが、知識がなくても問題ありません。
systemdサービスはsystemctl
によって管理されます 指図。 systemctl
を実行する場合 引数なしで、デフォルトのlist-units
を呼び出します サブコマンドで、サービス、ソケット、ターゲットなどのさまざまなタイプのsystemdユニットを一覧表示します。
ただし、目的はサービスを一覧表示することであるため、ユニットタイプを--type
で指定します。 このようなフラグ:
systemctl --type=service
list-units
を指定しなかったことに気づきましたか デフォルトなのでサブコマンド?規則に従いたい場合は、それも指定できます。私はこの方法が好きで、チュートリアルの残りの部分ではこの規則に従います。
systemctl list-units --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
apparmor.service loaded active exited Load AppArmor profiles
apport.service loaded active exited LSB: automatic crash report generation
出力について説明しましょう:
-
UNIT
:systemdユニットの名前。 -
LOAD
:ユニット構成ファイルがsystemdによって解析されたかどうか。 ACTIVE
:ユニットの高レベルの状態。-
SUB
:ユニットの低レベル状態。アクティブなユニットは、実行状態または終了状態になります。この値はサービスタイプによって異なります。
ご覧のとおり、Linuxシステムにロードされているサービスを一覧表示できます。ただし、アクティブなsystemdサービスが実行されているか、(正常に実行された後に)終了する可能性があります。
アクティブ状態には、実行中、終了などのサブステータスを設定することもできます。同じ--state
を使用できます。 サブステートでフラグを立てます。
実行中のsystemdサービスを一覧表示するには、--state=running
を使用します このようなフラグ:
systemctl list-units --type=service --state=running
これが私のシステムのサンプル出力で、実行中のsystemdサービスの一部を示しています:
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
デフォルトでは、systemctlコマンドはロードされたアクティブなユニットのみを表示します。
非アクティブなサービスを含む、ロードされているすべてのサービスを一覧表示する場合は、--all
を使用します。 フラグ:
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
非アクティブなサービスのみを表示する場合は、--all
などのさまざまなフラグを組み合わせることができます。 および--state
このように:
systemctl list-units --all --type=service --state=inactive
出力からわかるように、すべての非アクティブなsystemdサービスが表示されます:
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サービスを一覧表示します(ロードされていない場合でも)
すべてのsystemdユニットには、サービス、ソケット、その他のユニットを問わず、
のユニットファイルがあります。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
[email protected] static enabled
各状態タイプの説明は長すぎるため、この記事の範囲外です。たぶん私はそれについて将来書くつもりです。
システムが起動するたびに自動的に実行されるすべてのsystemdサービスを表示するには、次のコマンドを使用します。
systemctl list-unit-files --type=service --state=enabled
有効な状態と混同していませんか?それは正常です。多くの新規ユーザーは、有効なシステムサービスと実行中のサービスを混同しています。
ただし、systemdサービスが有効になっているということは、システムの起動時にサービスが自動的にアクティブ化されることを意味します。
UNIT FILE STATE VENDOR PRESET
accounts-daemon.service enabled enabled
anacron.service enabled enabled
apparmor.service enabled enabled
[email protected] 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
ベンダープリセットに気づきましたか?前の例にもありました。
ベンダープリセットは、プログラムがインストールされたときのsystemdユニットの自動動作を定義します。
新しいプログラムXYZをインストールしたとします。このXYZには、ベンダープリセットが有効になっているxyz.serviceというsystemdサービスがあります。これは、プログラムのインストール後、システムを起動すると、このxyz.serviceが起動時に自動的にアクティブ化されることを意味します。
ベンダープリセットが無効になっている場合は、手動で有効に設定する必要があります。有効にすると、起動するたびに自動的に起動します。
sudo systemd enable xyz.service
これまで、サービスを一覧表示するさまざまな方法を見てきました。しかし、単一のサービスに焦点を当てたものはありません。
status
を使用して、systemdサービスの詳細情報を取得できます systemctlのサブコマンド。タブ補完はこのコマンドで機能します。
systemctl status <service_name>
ネットワークマネージャサービスの例を次に示します。
[email protected]:~$ 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
サービスの状態、サービスのマニュアルページ、消費するメモリ、プロセスIDなど、多くの有用な情報が提供されていることがわかります。また、サービスの最後のいくつかのジャーナルログも表示されます。
シェルスクリプトでサービスがアクティブかどうかを確認する場合は、is-active
を使用できます。 サブコマンド。アクティブの場合、出力は0です。
systemctl is-active application.service
同様に、サービスが有効になっているかどうか(起動時に自動的に開始するように設定されているかどうか)を確認する場合は、is-enabled
を使用できます。 サブコマンド。有効なサービスの出力は0です。
systemctl is-enabled application.service
これで、systemdサービスの一覧表示について理解が深まったと思います。 systemdおよびsystemctlコマンドについていくつかの新しいことを学んだことを願っています。
コメントセクションでフィードバック、質問、提案を提供することを躊躇しないでください。