SystemdEssentials:サービス、ユニット、ジャーナルの操作
序章
近年、Linuxディストリビューションは他のinitシステムから systemd
. The systemd
ツールスイートは、起動以降のマシン全体を管理するための高速で柔軟なinitモデルを提供します。
このガイドでは、管理のために知っておく必要のある最も重要なコマンドを簡単に説明します。 systemd
有効なサーバー。 これらは、を実装するすべてのサーバーで機能するはずです systemd
(Ubuntu 15.04、Debian 8、CentOS 7、Fedora 15以降のOSバージョン)。 始めましょう。
基本ユニット管理
その基本的なオブジェクト systemd
管理し、それに基づいて行動するのは「ユニット」です。 ユニットにはさまざまなタイプがありますが、最も一般的なタイプは「サービス」(で終わるユニットファイルで示されます)です。 .service
). 上のサービスを管理するには systemd
有効なサーバー、私たちの主なツールは systemctl
指図。
通常のinitシステムコマンドはすべて、 systemctl
指図。 を使用します nginx.service
デモンストレーションするユニット(このサービスファイルを取得するには、パッケージマネージャーとともにNginxをインストールする必要があります)。
たとえば、次のように入力してサービスを開始できます。
- sudo systemctl start nginx.service
次のように入力すると、再度停止できます。
- sudo systemctl stop nginx.service
サービスを再開するには、次のように入力します。
- sudo systemctl restart nginx.service
通常の機能を中断せずにサービスのリロードを試みるには、次のように入力します。
- sudo systemctl reload nginx.service
ユニットの有効化または無効化
デフォルトでは、ほとんど systemd
ユニットファイルは起動時に自動的に開始されません。 この機能を構成するには、ユニットを「有効にする」必要があります。 これにより、特定のブート「ターゲット」に接続され、そのターゲットが開始されたときにトリガーされます。
起動時にサービスを自動的に開始できるようにするには、次のように入力します。
- sudo systemctl enable nginx.service
サービスを再度無効にする場合は、次のように入力します。
- sudo systemctl disable nginx.service
システム状態の概要を取得する
から引き出すことができる情報はたくさんあります systemd
サーバーは、システム状態の概要を取得します。
たとえば、すべてのユニットファイルを取得するには systemd
「アクティブ」としてリストされている、タイプ(実際には省略できます list-units
これがデフォルトであるため systemctl
行動):
- systemctl list-units
すべてのユニットを一覧表示するには systemd
現在アクティブでないものを含め、メモリにロードした、またはロードを試みた場合は、 --all
スイッチ:
- systemctl list-units --all
システムにインストールされているすべてのユニットを一覧表示します。 systemd
メモリにロードしようとしていません。次のように入力します。
- systemctl list-unit-files
基本的なログ情報の表示
A systemd
と呼ばれるコンポーネント journald
システムのすべての部分からジャーナルエントリを収集して管理します。 これは基本的に、アプリケーションとカーネルからのログ情報です。
最も古いエントリから始まるすべてのログエントリを表示するには、次のように入力します。
- journalctl
デフォルトでは、これにより、現在および以前のブートからのエントリが表示されます。 journald
以前のブートレコードを保存するように構成されています。 一部のディストリビューションはデフォルトでこれを有効にしますが、他のディストリビューションはこれを有効にしません(これを有効にするには、 /etc/systemd/journald.conf
ファイルを設定し、 Storage=
「永続的」オプション、または「永続的」と入力して永続的ディレクトリを作成するオプション sudo mkdir -p /var/log/journal
).
現在のブートからのジャーナルエントリのみを表示したい場合は、 -b
国旗:
- journalctl -b
通常は次のように表されるカーネルメッセージのみを表示する dmesg
、あなたは使用することができます -k
国旗:
- journalctl -k
繰り返しますが、これを現在のブートにのみ制限するには、 -b
国旗:
- journalctl -k -b
ユニットの状態とログのクエリ
上記のコマンドを使用すると、一般的なシステム状態にアクセスできますが、個々のユニットの状態に関する情報を取得することもできます。
ユニットの現在の状態の概要を表示するには、 status
オプションと systemctl
指図。 これにより、ユニットがアクティブであるかどうか、プロセスに関する情報、および最新のジャーナルエントリが表示されます。
- systemctl status nginx.service
問題のユニットのすべてのジャーナルエントリを表示するには、 -u
ユニット名のオプション journalctl
指図:
- journalctl -u nginx.service
いつものように、エントリを現在のブートに制限するには、 -b
国旗:
- journalctl -b -u nginx.service
ユニットとユニットファイルの検査
これで、ユニットの状態を開始または停止して変更する方法と、状態およびジャーナル情報を表示してプロセスで何が起こっているかを把握する方法を理解しました。 ただし、ユニットおよびユニットファイルの他の側面を検査する方法はまだわかりません。
ユニットファイルには、次のパラメータが含まれています。 systemd
ユニットの管理と実行に使用します。 ユニットファイルの全内容を表示するには、次のように入力します。
- systemctl cat nginx.service
ユニット(どのユニット)の依存関係ツリーを表示するには systemd
ユニットの起動時にアクティブ化を試みます)、次のように入力します。
- systemctl list-dependencies nginx.service
これにより、従属単位が表示されます。 target
ユニットは再帰的に拡張されました。 すべての依存ユニットを再帰的に拡張するには、 --all
国旗:
- systemctl list-dependencies --all nginx.service
最後に、システム上のユニットの設定の低レベルの詳細を確認するには、 show
オプション:
- systemctl show nginx.service
これにより、管理されている各パラメータの値がわかります systemd
.
ユニットファイルの変更
ユニットファイルに変更を加える必要がある場合は、 systemd
から変更を加えることができます systemctl
実際のディスクの場所に移動する必要がないように、コマンド自体を実行します。
デフォルトのユニットファイルの設定を追加または上書きするために使用できるユニットファイルスニペットを追加するには、単に edit
ユニットのオプション:
- sudo systemctl edit nginx.service
スニペットを作成するのではなく、ユニットファイルのコンテンツ全体を変更する場合は、 --full
国旗:
- sudo systemctl edit --full nginx.service
ユニットファイルを変更した後、リロードする必要があります systemd
自分自身を処理して変更を取得します。
- sudo systemctl daemon-reload
ターゲットの使用(ランレベル)
initシステムのもう1つの機能は、サーバー自体を異なる状態間で遷移させることです。 従来のinitシステムは通常、これらを「ランレベル」と呼び、システムが一度に1つのランレベルにのみ存在できるようにします。
の systemd
、代わりに「ターゲット」が使用されます。 ターゲットは基本的に、サーバーを特定の状態にするためにサーバーが使用できる同期ポイントです。 サービスおよびその他のユニットファイルをターゲットに関連付けることができ、複数のターゲットを同時にアクティブにすることができます。
システムで使用可能なすべてのターゲットを表示するには、次のように入力します。
- systemctl list-unit-files --type=target
デフォルトのターゲットを表示するには systemd
起動時に到達しようとします(これにより、そのターゲットの依存関係ツリーを構成するすべてのユニットファイルが起動します)、次のように入力します。
- systemctl get-default
を使用して、起動時に使用されるデフォルトのターゲットを変更できます。 set-default
オプション:
- sudo systemctl set-default multi-user.target
ターゲットに関連付けられているユニットを確認するには、次のように入力します。
- systemctl list-dependencies multi-user.target
システム状態を変更して、ターゲット間を移行することができます。 isolate
オプション。 これにより、指定されたターゲットに関連付けられていないユニットが停止します。 分離しているターゲットが重要なサービスを停止しないことを確認してください。
- sudo systemctl isolate multi-user.target
サーバーの停止または再起動
システムが移行できる主要な状態のいくつかについては、ショートカットを使用できます。 たとえば、サーバーの電源をオフにするには、次のように入力します。
- sudo systemctl poweroff
代わりにシステムを再起動する場合は、次のように入力します。
- sudo systemctl reboot
次のように入力すると、レスキューモードで起動できます。
- sudo systemctl rescue
ほとんどのオペレーティングシステムには、これらの操作の従来のエイリアスが含まれているため、簡単に入力できます。 sudo poweroff
また sudo reboot
なしで systemctl
. ただし、これがすべてのシステムで設定されるとは限りません。
次のステップ
これで、を使用するサーバーを管理する方法の基本を理解する必要があります systemd
. ただし、ニーズが拡大するにつれて、学ぶべきことがたくさんあります。 以下は、このガイドで説明したいくつかのコンポーネントに関するより詳細な情報が記載されたガイドへのリンクです。
- Systemctlを使用してSystemdサービスとユニットを管理する方法
- Journalctlを使用してSystemdログを表示および操作する方法
- SystemdUnitsとUnitFilesを理解する
initシステムの長所を活用する方法を学ぶことで、マシンの状態を制御し、サービスとプロセスをより簡単に管理できます。