- 「systemctl --type=service --state=running」を使用すると、systemd を使用した Linux システムで実行中のすべてのサービスを確認できます。名前、ロード、サブ状態、説明などの詳細が表示されます。
- Systemd は Linux でサービスを起動するシステムおよびサービス マネージャーです。サービスは UI のないバックグラウンド タスクであり、デーモンは起動時に起動されます。
- ほとんどの Linux ディストリビューションは systemd を使用していますが、runit や s6-linux-init のような代替手段もあります。「pstree | head -5」を使用すると、システムが systemd ベースであるかどうかを確認できます。
systemd を使用した Linux システムで実行中のすべてのサービスを確認するには、「systemctl --type=service --state=running」というコマンドを使用します。これにより、アクティブな各サービスの名前、ロード、サブ状態、説明が表示されます。状態の値を変更して、停止、終了、失敗、または非アクティブなサービスを確認することもできます。
Linux コンピューターは、サービスまたはデーモンと呼ばれる多くのバックグラウンド タスクに依存しています。systemd ベースのディストリビューションでは、実行中、無効、または失敗したサービスを確認できる組み込みのコマンドが用意されています。
サービスとデーモン
サービスとデーモンは、ユーザー インターフェイスなしで実行され、人間による操作を必要とせず、通常はコンピューターの起動時に開始されるバックグラウンド タスクです。
かつては、サービスは「init」によって起動されました。これは、最初に起動されるプロセスでした。サービスの詳細が「/etc/init/d」ディレクトリにあるスクリプトのコレクションに保持されていました。systemd 以外のディストリビューションでは、今でもそれが当てはまります。
systemd の世界では、サービスは「systemd」によって起動されます。これは、最初に起動されるプロセスです。サービスの詳細が「/usr/lib/systemd」ディレクトリにあるユニット ファイルに保存されます。
マニュアル ページによると、systemd はシステムおよびサービス マネージャーです。systemctl コマンドを使用して、サービスやデーモンを含む systemd システムのさまざまな側面を検査および制御できます。
ここでは systemd 固有のコマンドについて説明しているので、最初に知っておく必要があるのは、systemd ベースのディストリビューションを実行しているかどうかです。
init ベースか systemd ベースか?
Arch、Red Hat、Debian を含む Linux ディストリビューションの大半は systemd を使用しており、その派生ディストリビューションの多くも systemd を使用しています。これには、Ubuntu ファミリのディストリビューション、Fedora とそのスピン、Manjaro とその他の Arch ベースのディストリビューションが含まれます。
ただし、systemd を使用する必要を回避するために特別に作成された、これらのディストリビューションのフォークまたはフレーバーがあります。さらに、ディストリビューションにデフォルトで付属しているものとは異なる init システムを選択することもできます。たとえば、runit や s6-linux-init などです。
自分で設定していない Linux コンピューターを管理する場合は、systemd を使用しているかどうかを確認する唯一の方法は、確認することです。pstree コマンドを使用してプロセス ツリーを確認することで確認できます。ツリーの一番上だけを見ればよいので、最初に実行されるプロセスを探しているわけですから、head コマンドで出力をパイプし、最初の 5 つのエントリを要求します。
pstree | head -5
systemd が起動後に最初に実行されるプロセスであることがわかります。つまり、systemd ベースの Linux インストールを使用していることになります。
systemctl を使用してサービスをリストアップする
サービスとデーモンをリストアップするコマンドは systemctl です。type オプションと state オプションを使用して systemctl コマンドを絞り込むことができます。systemctl には、実行中のサービスを報告するように求めています。
systemctl --type=service --state=running
情報が表形式で生成されます。ターミナル ウィンドウの幅または長さが大きすぎる場合は、デフォルトのファイル ビューアー (おそらく less) に表示されます。
表の右端を見るには、右矢印キーを押します。通常のビューに戻るには、左矢印キーを押します。
less を終了するには、Q キーを押します。表示される列は次のとおりです。
- Unit: サービスまたはデーモンの名前。この列は「Unit」というタイトルが付いています。これは、この列にあるものが、systemd がユニット ファイルで見つけた情報を使用して起動されたためです。
- Load: サービスまたはデーモンのロード状態。ロード、not-found、bad-setting、error、または masked のいずれかになります。
- Active: サービスまたはデーモンの全体的な状態。アクティブ、リロード中、非アクティブ、失敗、アクティブ化中、または非アクティブ化中のいずれかになります。
- SUB: サービスまたはデーモンのサブ状態。停止、終了、失敗、非アクティブ、または実行中のいずれかになります。
- 説明: ユニットの簡単な説明。
systemctl
の出力は、特定のサービスに注目したい場合はgrep
でパイプすることができます。このコマンドは、ssh
サービスの表エントリを分離します。
systemctl --type=service --state=running | grep ssh
ここまで、state=running
オプションを提供することで、表の内容をフィルタリングしてきました。代わりに、サブ状態の可能な値のいずれかを使用できます: 停止、終了、失敗、非アクティブ、または実行中。
失敗したサービスを探してみましょう:
systemctl --type=service --state=failed
サブ状態の組み合わせを使用できます。それらをコンマ区切りのリストとして入力します。オプション間に空白を含めないようにしてください。これにより、いずれかの状態に一致するサービスが検索されることに注意してください。
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 list-unit-files
出力には、以前のコマンドの結果よりも多くのエントリが含まれます。
テスト用コンピューターでは、結果リストは以前のコマンドの出力の約 4 倍の長さです。
state
オプションを使用する場合は、前述のように複数の状態を使用できます。同じルールが適用されます。オプションはコンマ区切りの値として提供し、空白を含めないでください。
このコマンドは、無効になっているか起動に失敗したすべてのユニット ファイルをリストアップします。
systemctl list-unit-files --state=enabled,failed
state オプションで選択した内容に従ってフィルタリングされた、結果の数が少なくなります。
1 つのサービスの詳細を見る
1 つのサービスやデーモンについて何かが興味をそそられ、さらに詳しく調べる価値がある場合は、systemctl status オプションを使用して詳細を見ることができます。
SSH デーモン sshd を見てみましょう。必要なのは、status オプションとサービスまたはデーモンの名前を使用することだけです。
systemctl status sshd
このコンパクトな表示には、以下が表示されます:
- サービスの名前と簡単な説明。カラーコード付きのドットは、実行中かどうかを示します。緑は実行中、赤は実行中ではありません。
- ユニット ファイルへのパスを含む、ロードされた内容。
- 実行されてからの時間。
man
マニュアルにドキュメントが格納されている場所。- 実行中のインスタンスのプロセス ID。
- このサービスの実行中の同時インスタンスの数。通常は 1 つです。
- 消費されているメモリの量。
- 消費された CPU 時間。
- サービスが属する制御グループ。
システム ログからの関連エントリも表示されます。これらは通常、サービスの起動などのイベントです。正しく起動できなかったサービスやデーモンを調査している場合は、これらは参考になる場合があります。
自律システム
サービスとデーモンはオペレーティング システムの多くの自動アクションを提供するため、不可欠です。つまり、その健全性も不可欠です。
サービス、デーモン、およびユニット ファイルを確認することは簡単で、有益です。また、サービスまたはデーモンが起動しない場合にも、貴重なトラブルシューティング手順になります。
コメントする