Systemd Essentials:サービス、ユニット、およびジャーナルの操作

前書き

近年、Linuxディストリビューションは他のinitシステムから `+ systemd `にますます移行しています。 ツールの「 systemd +」スイートは、ブート以降のマシン全体を管理するための高速で柔軟な初期化モデルを提供します。

このガイドでは、「+ 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 `が「アクティブ」としてリストしたすべてのユニットファイルを取得するには、次のように入力します(これはデフォルトの ` systemctl `動作であるため、実際に ` list-units +`を省略できます)。

systemctl list-units

現在アクティブではないものも含め、 `+ systemd `がメモリにロードした、またはメモリにロードしようとしたすべてのユニットを一覧表示するには、 `-all +`スイッチを追加します。

systemctl list-units --all

`+ systemd +`がメモリへのロードを試行していないユニットを含む、システムにインストールされているすべてのユニットを一覧表示するには、次のように入力します。

systemctl list-unit-files

基本的なログ情報の表示

`+ journald `と呼ばれる ` systemd +`コンポーネントは、システムのすべての部分からジャーナルエントリを収集して管理します。 これは基本的に、アプリケーションとカーネルからのログ情報です。

最も古いエントリから開始して、すべてのログエントリを表示するには、次のように入力します。

journalctl

デフォルトでは、以前のブートレコードを保存するように「+ journald 」が設定されている場合、現在および以前のブートからのエントリが表示されます。 一部のディストリビューションはこれをデフォルトで有効にしますが、他のディストリビューションは有効にしません(これを有効にするには、 ` / etc / systemd / journald.conf `ファイルを編集して ` Storage = `オプションを「persistent」に設定するか、 ` sudo mkdir -p / var / log / journal +`と入力してディレクトリを作成します)。

現在のブートからのジャーナルエントリのみを表示する場合は、「+-b +」フラグを追加します。

journalctl -b

通常「+ dmesg 」で表されるようなカーネルメッセージのみを表示するには、「-k +」フラグを使用できます。

journalctl -k

繰り返しますが、 `+ -b +`フラグを追加することで、これを現在のブートのみに制限できます:

journalctl -k -b

ユニットの状態とログのクエリ

上記のコマンドを使用すると、一般的なシステム状態にアクセスできますが、個々のユニットの状態に関する情報も取得できます。

ユニットの現在の状態の概要を表示するには、 `+ systemctl `コマンドで ` status +`オプションを使用できます。 これにより、ユニットがアクティブかどうか、プロセスに関する情報、および最新のジャーナルエントリが表示されます。

systemctl status nginx.service

問題のユニットのすべてのジャーナルエントリを表示するには、 `+ journalctl `コマンドにユニット名とともに ` -u +`オプションを指定します。

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

ほとんどのオペレーティングシステムにはこれらの操作の従来のエイリアスが含まれているため、「+ systemctl 」なしで「 sudo poweroff 」または「 sudo reboot +」と簡単に入力できます。 ただし、これはすべてのシステムでセットアップされるとは限りません。

次のステップ

ここまでで、 `+ systemd +`を使用するサーバーを管理する方法の基本を知っているはずです。 ただし、ニーズの拡大に応じて、学ぶべきことがさらに多くあります。 以下は、このガイドで説明したいくつかのコンポーネントに関する詳細情報を含むガイドへのリンクです。

初期化システムの長所を活用する方法を学習することで、マシンの状態を制御し、サービスとプロセスをより簡単に管理できます。

Related