第 3 章 SYSTEMD によるサービス管理
3.3. SYSTEMD ターゲットでの作業
3.4.3. システムのサスペンド
システムをサスペンドするには、root で次のコマンドを実行します。
systemctl suspend
このコマンドは、システムの状態を RAM に保存し、マシンにある、RAM モジュール以外のほとんどの デバイスの電源を切ります。マシンの電源を戻すと、システムは再起動せずに RAM からその状態を復 元します。システムの状態がハードディスクではなく RAM に保存されるので、システムのサスペンド モードから復元する場合は、休止状態からの復元と比べて著しく速くなります。ただし、システムをサ スペンドした状態は、停電に対して脆弱となります。
システムを休止状態にする方法は、「システムの休止状態」を参照してください。
3.4.4. システムの休止状態
システムを休止状態にするには、root で次のコマンドを実行します。
systemctl hibernate
このコマンドは、システムの状態をハードディスクドライブに保存し、マシンの電源を切ります。マシ ンの電源を戻すと、システムは再起動せずに、保存されたデータからその状態を復元します。システム
の状態が RAM ではなくハードディスクに保存されるため、マシンが RAM モジュールに電力を維持する
必要がありません。ただし、システムの休止状態から復元する場合は、サスペンドモードからの復元と 比べて大幅に遅くなります。
システムを休止状態にしてサスペンドするには、root で次のコマンドを実行します。
systemctl hybrid-sleep
システムをサスペンドする方法は、「システムのサスペンド」を参照してください。
3.5. SYSTEMD ユニットファイルでの作業
本章では、systemd ユニットファイルに関する説明が含まれています。以下のセクションでは、次の方 法を紹介します。
カスタムユニットファイルの作成
SysV Init スクリプトのユニットファイルへの変換
既存のユニットファイルの変更 インスタンス化されたユニットの使用
3.5.1. ユニットファイルの概要
ユニットファイルには、ユニットを説明し、その動作を定義する設定ディレクティブが含まれます。複
数の systemctl コマンドがバックグラウンドでユニットファイルと連携します。詳細な調整を行うに
は、システム管理者がユニットファイルを手動で編集または作成する必要があります。表3.1「systemd
のユニットファイルの場所」は、システムにユニットファイルを保存する 3 つのメインディレクト リーを一覧表示します。/etc/systemd/system/ ディレクトリーは、システム管理者が作成またはカス タマイズするユニットファイル用に予約されます。
ユニットファイル名は、以下のフォーマットを使用します。
unit_name.type_extension
unit_name はユニットの名前を表し、type_extension はユニットタイプを指定します。ユニットタイ プの完全なリストは、表3.2「利用可能な systemd のユニットタイプ」 を参照してください。たとえ ば、通常は、システムには sshd.service ユニットおよび sshd.socket ユニットがあります。
ユニットファイルには、追加の設定ファイルのディレクトリーを追加できます。たとえば、カスタム設 定オプションを sshd.service に追加するには、sshd.service.d/custom.conf ファイルを作成し、追加 のディレクティブを挿入します。設定ディレクトリーの詳細は、「既存のユニットファイルの変更」を 参照してください。
さらに、sshd.service.wants/ ディレクトリーおよび sshd.service.requires/ ディレクトリーを作成す ることもできます。このディレクトリーには、sshd サービスの依存関係であるユニットファイルへの シンボリックリンクが含まれます。シンボリックリンクは、[Install] ユニットファイルに基づいてイン ストール時に、または [Unit] オプションに基づいてランタイム時に自動的に作成されます。このディレ クトリーとシンボリックリンクを手動で作成することもできます。[Install] オプションおよび [Unit] オ プションの詳細は、以下の表を参照してください。
多くのユニットファイルオプションは、いわゆるユニット指定子ユニット指定子を使用して設定できます。これは、
ユニットファイルが読み込まれる際にユニットパラメーターに動的に置き換えられるワイルドカード文 字列です。これにより、インスタンス化されたユニットを生成するテンプレートとしての役割を担う汎 用ユニットファイルを作成できます。詳細は、「インスタンス化されたユニットの使用」を参照してく ださい。
3.5.2. ユニットファイル構造
通常、ユニットファイルは 3 つのセクションで構成されています。
[Unit] セクション- ユニットのタイプに依存しない一般的なオプションが含まれます。このセク
ションに含まれるオプションはユニットを説明し、ユニットの動作を指定し、他のユニットへ の依存関係を設定します。最もよく使用される [Unit] オプションの一覧は、表3.9「[Unit] セク ションの重要なオプション」を参照してください。
[Unit type] セクション - ユニットにタイプ固有のディレクティブがある場合は、そのユニット タイプにちなんで命名されたセクションにまとめられます。たとえば、サービスユニットファ
イルには [Service] セクションが含まれます。
[Install] セクション - systemctl enable コマンドおよび disable コマンドでユニットをインス トールした際の情報が含まれます。[Install] セクションのオプションの一覧は、表3.11「[Install]
セクションの重要なオプション」を参照してください。
3.5.2.1. [Unit] セクションの重要なオプションセクションの重要なオプション
以下の表は、[Unit] セクションの重要なオプションを示しています。
表
表3.9 [Unit] セクションの重要なオプションセクションの重要なオプション
オプション
オプション[a] 説明説明
説明
説明 ユニットの説明です。このテキストは、たとえば
systemctl statusコマンドの出力に表示されま す。
Documentation ユニットのドキュメントを参照する URI の一覧を提
供します。
After[b] ユニットが開始する順序を定義します。このユニッ
トは、Afterで指定されたユニットがアクティブに なると開始します。Requiresとは異なり、After は、指定したユニットを明示的にアクティブにしま せん。Beforeオプションには、Afterと機能が反対 になります。
Requires その他のユニットに依存関係を設定しま
す。Requiresに一覧表示されるユニットは、対応 するユニットと共にアクティブになります。必要な ユニットのいずれかが開始しないと、このユニット はアクティブになりません。
Wants Requiresよりも強度の弱い依存関係を設定しま
す。一覧に示されるユニットのいずれかが正常に開 始しなくても、このユニットのアクティべーション には影響を与えません。これは、カスタムのユニッ ト依存関係を設定する際に推奨される方法です。
Conflicts Requiresと反対の依存関係 (負の依存関係) を設定
します。
[a] セクションで設定可能なオプションの一覧は、man ページのsystemd.unit(5)を参照してください。
[b] ほとんどの場合、ユニットファイルオプションのAfterおよびBeforeで依存関係の並び順を設定するだけで十分で す。Wants (推奨) またはRequiresで要件の依存関係も設定する場合は、依存関係の並び順を指定する必要がありま す。これは、並び順と要件の依存関係が相互に依存していないためです。
3.5.2.2. [Service] セクションの重要なオプションセクションの重要なオプション
以下の表では、[Service] セクションの重要なオプションを紹介しています。
表
表3.10 [Service] セクションの重要なオプションセクションの重要なオプション オプション
オプション[a] 説明説明
Type ExecStartおよび関連オプションの機能に影響を与 えるユニットプロセスの起動タイプを設定します。
以下のいずれかになります。
* simple - デフォルト値です。ExecStartで起動す るプロセスは、サービスのメインプロセスです。
* forking - ExecStartで起動するプロセスは、サー ビスのメインプロセスになる子プロセスを起動しま す。親プロセスは、このプロセスが完了すると終了 します。
* oneshot - このタイプはsimpleと似ています が、結果として生じるユニットを起動する前に終了 します。
* dbus - このタイプはsimpleと似ていますが、メ インプロセスが D-Bus 名を取得する前に、結果とし て生じるユニットが起動します。
* notify - このタイプはsimpleと似ていますが、結 果として生じるユニットは、通知メッセージが
sd_notify() 関数で送信されないと起動しません。
* idle - simpleと似ていますが、サービスバイナ リーの実行は、すべてのジョブが終了するまで行い ません (遅らせます)。これにより、ステータスの出 力とサービスのシェル出力を分けることができま す。
ExecStart ユニットの開始時に実行するコマンドまたはスクリ
プトを指定します。ExecStartPreおよび
ExecStartPostは、ExecStartの前後に実行する カスタムコマンドを指定します。Type=oneshotを 使用すれば、連続して実行する複数のカスタムコマ ンドを指定できます。
ExecStop ユニットの停止時に実行するコマンドまたはスクリ
プトを指定します。
ExecReload ユニットの再読み込み時に実行するコマンドまたは
スクリプトを指定します。
Restart このオプションを有効にすると、systemctlコマン
ドによる完全な停止の例外により、そのプロセスの 終了後にサービスが再起動します。
RemainAfterExit True に設定すると、サービスは、そのプロセスがす
べて終了していてもアクティブと見なされます。デ フォルトの値は False です。このオプションは、特 にType=oneshotが設定されている場合に役に立 ちます。
オプション
オプション[a] 説明説明