systemctl を使用して Linux サービスを一覧表示する方法

公開: 2022-10-23
bash プロンプトを表示している Linux ラップトップ
Fatmawati achmad zaenuri/Shutterstock.com
Linux システムで systemd を使用して実行中のすべてのサービスを表示するには、コマンド「systemctl --type=service --state=running」を使用します。 これにより、アクティブな各サービスの名前、負荷、サブ状態、および説明が表示されます。 状態の値を変更して、停止、終了、失敗、または非アクティブのサービスを確認することもできます。

Linux コンピューターは、サービスまたはデーモンと呼ばれる多くのバックグラウンド タスクに依存しています。 systemd ベースのディストリビューションには、実行中、無効、または失敗したサービスを確認できる組み込みコマンドがあります。

サービスとデーモン

サービスとデーモンは、ユーザー インターフェイスなしで実行されるバックグラウンド タスクであり、人間の操作を必要とせず、通常はコンピューターの起動時に開始されます。

かつて、サービスはinitによって起動されました。これは、最初に起動されるプロセスでした。 サービスの詳細は、「/etc/init/d」ディレクトリにある一連のスクリプトに保持されていました。 systemd 以外のディストリビューションでは、まだそうです。

systemd の世界では、サービスはsystemdによって起動されます。これは、起動される最初のプロセスです。 サービスの詳細は、「/usr/lib/systemd」ディレクトリにあるユニット ファイルに保存されます。

man ページによると、 systemdはシステムおよびサービス マネージャーです。 systemctlコマンドを使用して、サービスやデーモンなど、systemd システムのさまざまな側面を検査および制御できます。

ここでは systemd 固有のコマンドを見ているため、最初に知っておく必要があるのは、systemd ベースのディストリビューションを実行しているかどうかです。

関連: Linux の systemd が何年も経った今でも意見が分かれる理由

init または systemd ベース?

Arch、Red Hat、Debian、およびそれらから派生した多くのディストリビューションを含む、Linux ディストリビューションの大多数は systemd を使用しています。 これには、ディストリビューションの Ubuntu ファミリ、Fedora とそのスピン、Manjaro とその他の Arch ベースのディストリビューションが含まれます。

ただし、systemd の使用を避けるために特別に作成された、これらのディストリビューションの一部のフォークまたはフレーバーがあります。 それだけでなく、runit や s6-linux-init など、ディストリビューションにデフォルトで付属しているものの代わりに、誰かが使用することを選択できる他の init システムがあります。

systemd を使用して起動時に Linux プログラムを実行する方法
関連systemd を使用して起動時に Linux プログラムを実行する方法

自分でセットアップしていない Linux コンピューターを管理する必要がある場合、それが systemd を使用しているかどうかを確認する唯一の方法は、確認することです。 これは、 pstreeコマンドを使用してプロセス ツリーを調べることで確認できます。 ツリーの最上部のみを確認する必要があります。つまり、最初に実行されるプロセスを探しているのです。そのため、 headコマンドを介して出力をパイプし、最初の 5 つのエントリを要求します。

 pstree | 頭-5 

ヘッドを介してパイプされた pstree を使用して、Linux インストールが systemd を使用しているかどうかを判断する

systemdは起動後に実行される最初のプロセスであることがわかります。したがって、Linux の systemd ベースのインストールを使用していることは間違いありません。

関連: Linux ターミナルからプロセスを管理する方法: 知っておくべき 10 のコマンド

systemctl を使用してサービスを一覧表示する

サービスとデーモンを一覧表示するコマンドはsystemctlです。 typeおよびstateオプションを使用してsystemctlコマンドを改良できます。 systemctlに実行中のサービスについて報告するように依頼しています。

 systemctl --type=service --state=running 

systemctl を使用して実行中のサービスを一覧表示する

情報のテーブルが生成されます。 端末ウィンドウに対して幅が広すぎたり長すぎたりすると、デフォルトのファイル ビューアーに表示されless

less ファイル ビューアに表示された systemctl 呼び出しの出力

テーブルの右端を表示するには、右矢印キーを押します。 通常のビューに戻るには、左矢印キーを押します。

less ファイル ビューアーに表示された systemctl 呼び出しからの出力の右側のセクション

Q キーを押して、less を終了します。 表示される列は次のとおりです。

  • Unit : サービスまたはデーモンの名前。 このコラムのタイトルは「ユニット」です。これは、このコラムにあるものはすべて、ユニット ファイルにあるsystemdの情報を使用して起動されたためです。
  • Load : サービスまたはデーモンの負荷状態。 ロードされている、見つからない、不適切な設定、エラー、またはマスクされている可能性があります。
  • アクティブ: サービスまたはデーモンの全体的な状態。アクティブ、リロード中、非アクティブ、失敗、アクティブ化、または非アクティブ化のいずれかです。
  • SUB : サービスまたはデーモンのサブ状態。 停止、終了、失敗、非アクティブ、または実行中の可能性があります。
  • 説明: ユニットの簡単な説明。

単一のサービスに集中したい場合は、 systemctlの出力をgrepでパイプできます。 このコマンドは、 sshサービスのテーブル エントリを分離します。

 systemctl --type=service --state=running | grep ssh 

grep を使用して結果から単一のサービスを分離する

これまでのところ、 state=runningオプションを指定して、テーブルの内容をフィルタリングしてきました。 代わりに、サブ状態の可能な値のいずれかを使用できます: デッド、終了、失敗、非アクティブ、または実行中。

失敗したサービスを探してみましょう。

 systemctl --type=service --state=failed 

systemctl を使用した失敗したサービスのレポート

サブステートの組み合わせを使用できます。 コンマ区切りのリストとして入力します。 オプションの間に空白を含めないようにしてください。 これにより、いずれかの状態に一致するサービスが検索されることに注意してください。

 systemctl --type=service --state=失敗、終了

systemctl で失敗または終了したサービスを探す

右矢印キーを押して画面外の列を見ると、リストに終了したサービスと失敗したサービスが混在していることがわかります。

systemctl によって検出された失敗したサービスと終了したサービスの混合

デフォルトでは、 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 

systemctl を使用したユニット ファイルの一覧表示

色付きのテーブルが表示されます。

systemctl によって生成されたユニット ファイルの一覧が、less ファイル ブラウザーに表示されます。

stateオプションを削除すると、フィルタリングが削除されます。 出力には、状態に関係なく、インストールされているすべてのユニット ファイルが含まれます。

 systemctl リストユニットファイル

systemctl を使用して、フィルタリングなしでユニット ファイルを一覧表示する

出力には、前のコマンドの結果よりも多くのエントリが含まれます。

systemctl によって一覧表示され、less ファイル ブラウザーに表示されるすべてのユニット ファイル

私たちのテスト コンピューターでは、結果リストは、以前のコマンドの出力よりもほぼ 4 倍長くなります。

stateオプションを使用したい場合は、前に見たように複数の状態を使用できます。 同じルールが適用されます。 オプションはコンマ区切りの値として指定し、空白を含めないでください。

このコマンドは、無効になっている、または起動に失敗したすべてのユニット ファイルを一覧表示します。

 systemctl list-unit-files --state=enabled,failed 

systemctl を使用して、2 つの状態のいずれかに一致するユニット ファイルを探す

少数の結果が表示され、状態オプションで行った選択に従ってフィルタリングされます。

systemctl によって検出された、無効化されたユニット ファイルと失敗したユニット ファイルの混合

1つのサービスを詳しく見る

1 つのサービスまたはデーモンに関する何かが興味をそそり、さらに詳しく調べる必要がある場合は、systemctl status オプションを使用して詳細に調べることができます。

SSH デーモン sshd を見てみましょう。 status オプションとサービスまたはデーモンの名前を使用するだけです。

 systemctl ステータス sshd 

systemctl によって表示される単一のサービスの詳細

このコンパクトなディスプレイには次のものが表示されます。

  • サービスの名前と簡単な説明。 色分けされたドットは、実行中かどうかを示します。 緑は実行中、赤は実行していないことを示します。
  • ユニットファイルへのパスを含む、ロードされたもの。
  • 実行されている時間。
  • ドキュメントがmanマニュアルのどこにあるか。
  • 実行中のインスタンスのプロセス ID。
  • このサービスの同時実行インスタンスの数。 通常、これは 1 つになります。
  • メモリの消費量。
  • 消費された CPU 時間。
  • サービスが属するコントロール グループ。

システム ログの関連エントリも表示されます。 これらは通常、サービスの起動などのイベントです。 これらは、正しく起動しなかったサービスまたはデーモンを調べている場合に役立ちます。

関連: journalctl を使用して Linux システム ログを読み取る方法

自律神経系

サービスとデーモンは、オペレーティング システムの多くの自動アクションを提供するため、非常に重要です。 つまり、彼らの健康も重要です。

サービス、デーモン、およびユニット ファイルのビューを取得するのは簡単で、有益です。 これは、サービスまたはデーモンが開始を拒否した場合の貴重なトラブルシューティング手順でもあります。

関連: Linux で「Too Many Open Files」エラーを解決する方法