はじめに
近年、Linuxディストリビューションは、他のinitシステムからsystemd
に移行する傾向がますます増えています。 systemd
スイートのツールは、ブート以降のマシン全体を管理するための迅速かつ柔軟なinitモデルを提供しています。
このガイドでは、systemd
を有効にしたサーバーを管理するために知っておく必要のある最も重要なコマンドについて簡単に説明します。 これらのコマンドは、systemd
を実装している任意のサーバーで動作するはずです(Ubuntu 15.04以上、Debian 8、CentOS 7、Fedora 15以上のOSバージョン)。 さあ、始めましょう。
基本的なユニットの管理
systemd
が管理し、操作する基本的なオブジェクトは「ユニット」です。 ユニットには多くのタイプがありますが、最も一般的なタイプは「サービス」です(拡張子が.service
で終わるユニットファイルで示されます)。 systemd
を有効にしたサーバーでサービスを管理するための主要なツールは、systemctl
コマンドです。
通常のinitシステムコマンドには、systemctl
コマンドと同等のアクションがあります。 この例では、nginx.service
ユニットを使用して説明します(このサービスファイルを取得するには、パッケージマネージャーでNginxをインストールする必要があります)。
たとえば、サービスを起動するには、次のように入力します:
再度停止するには、次のように入力します:
サービスを再起動するには、次のように入力できます:
通常の機能を中断せずにサービスを再読み込みしようとするには、次のように入力できます:
ユニットの有効化または無効化
デフォルトでは、ほとんどのsystemd
ユニットファイルは、起動時に自動的に開始されません。この機能を構成するには、ユニットを「有効」にする必要があります。これにより、特定の起動「ターゲット」にフックされ、そのターゲットが開始されるとトリガーされるようになります。
サービスを起動時に自動的に起動するようにするには、次のように入力します:
サービスを再度無効にする場合は、次のように入力します:
システムの状態の概要を取得する
systemd
サーバーからシステムの状態の概要を取得するには、多くの情報を取得できます。
たとえば、「アクティブ」としてsystemd
がリストしているすべてのユニットファイルを取得するには、次のように入力します(これは実際にはsystemctl
のデフォルトの動作ですが、list-units
を省略してもかまいません):
systemd
がメモリにロードまたはロードしようとしたすべてのユニットをリストするには、--all
スイッチを追加します:
システムにインストールされているすべてのユニットをリストするには、systemd
がメモリにロードしようとしていないものも含めて、次のように入力します:
基本的なログ情報の表示
A systemd
component called journald
collects and manages journal entries from all parts of the system. This is basically log information from applications and the kernel.
最古のエントリからすべてのログエントリを表示するには、次のように入力します:
デフォルトでは、journald
が前の起動レコードを保存するように構成されている場合、現在のおよび前のブートからエントリが表示されます。 一部のディストリビューションはこれをデフォルトで有効にしていますが、他のディストリビューションはそうではありません(これを有効にするには、/etc/systemd/journald.conf
ファイルを編集してStorage=
オプションを「persistent」に設定するか、sudo mkdir -p /var/log/journal
を入力して永続的なディレクトリを作成します)。
現在のブートからのジャーナルエントリのみを表示したい場合は、-b
フラグを追加します:
一般的にdmesg
によって表されるカーネルメッセージのみを表示するには、-k
フラグを使用できます:
再度、これを現在のブートに限定するには、-b
フラグを追加します:
ユニットの状態とログのクエリ
上記のコマンドは一般的なシステムの状態にアクセスするためのものですが、個々のユニットの状態に関する情報も取得できます。
ユニットの現在の状態の概要を見るには、systemctl
コマンドに status
オプションを使用します。これにより、ユニットがアクティブかどうか、プロセスに関する情報、および最新のジャーナルエントリが表示されます:
問題のユニットのすべてのジャーナルエントリを見るには、journalctl
コマンドにユニット名とともに -u
オプションを指定します:
いつものように、-b
フラグを追加してエントリを現在の起動に制限することもできます:
ユニットとユニットファイルの検査
今では、ユニットの状態を変更して開始したり停止したりする方法、およびプロセスの状態とジャーナル情報を表示してプロセスの状況を把握する方法を知っています。しかし、ユニットやユニットファイルの他の側面を検査する方法はまだ見ていません。
A unit file contains the parameters that systemd
uses to manage and run a unit. To see the full contents of a unit file, type:
ユニットの依存関係ツリー(ユニットを開始するときに systemd
がアクティブ化しようとするユニット)を見るには、次のように入力します:
これにより、依存ユニットが表示され、target
ユニットが再帰的に展開されます。すべての依存ユニットを再帰的に展開するには、--all
フラグを渡します。
最後に、システム上のユニットの設定の低レベルの詳細を表示するには、show
オプションを使用できます。
これにより、systemd
によって管理されている各パラメータの値が表示されます。
ユニットファイルの変更
ユニットファイルを変更する必要がある場合、systemd
では実際のディスクの場所に移動する必要はありません。その代わりに、systemctl
コマンド自体から変更を行うことができます。
デフォルトのユニットファイルに設定を追加または上書きするためのユニットファイルスニペットを追加するには、単にユニットにedit
オプションを呼び出します。
スニペットを作成する代わりにユニットファイル全体を変更する場合は、--full
フラグを渡します。
ユニットファイルを変更した後は、変更内容を反映するためにsystemd
プロセス自体をリロードする必要があります。
ターゲット(ランレベル)の使用
イニシャライズシステムの別の機能は、サーバー自体を異なる状態に移行させることです。従来のイニシャライズシステムでは、これらを通常「ランレベル」と呼び、システムを一度に1つのランレベルにのみすることができます。
systemd
では、代わりに「ターゲット」が使用されます。ターゲットは基本的に、サーバーを特定の状態にするための同期ポイントです。サービスや他のユニットファイルはターゲットに結び付けることができ、複数のターゲットが同時にアクティブになることがあります。
システムで利用可能なすべてのターゲットを表示するには、次のように入力します:
systemd
が起動時に到達しようとするデフォルトのターゲット(これにより、そのターゲットの依存関係ツリーを構成するすべてのユニットファイルが開始されます)を表示するには、次のように入力します:
起動時に使用されるデフォルトのターゲットを変更するには、set-default
オプションを使用します:
ターゲットに結び付けられているユニットを表示するには、次のように入力します:
指定したターゲットに移行してシステムの状態を変更するには、isolate
オプションを使用します。これにより、指定されたターゲットに結び付けられていないユニットが停止します。孤立させるターゲットが必要なサービスを停止しないように注意してください:
サーバーの停止または再起動
システムが移行できる主要な状態のいくつかには、ショートカットが用意されています。たとえば、サーバーの電源を切るには、次のように入力します:
システムを再起動したい場合は、次のように入力してください:
レスキューモードにブートするには、次のように入力してください:
ほとんどのオペレーティングシステムには、これらの操作への伝統的なエイリアスが含まれているため、systemctl
なしで単にsudo poweroff
またはsudo reboot
を入力することができます。ただし、すべてのシステムでこれが設定されているとは限りません。
次の手順
これまでに、systemd
を使用するサーバーの管理の基本を学ぶことができました。ただし、必要に応じてさらに多くのことを学ぶことができます。以下は、このガイドで説明したコンポーネントについてより詳細な情報を提供するガイドへのリンクです:
- Systemdサービスとユニットを管理するためのSystemctlの使用方法
- Systemdログを表示および操作するためのJournalctlの使用方法
- Systemdユニットとユニットファイルの理解
イニシャルシステムの強みを活用することで、マシンの状態を制御し、サービスとプロセスをより簡単に管理できます。