第 3 章 SYSTEMD によるサービス管理
3.3. SYSTEMD ターゲットでの作業
3.3.1. SysV ランレベルと systemd ターゲットの違い
以前のバージョンの Red Hat Enterprise Linux は、SysV init または Upstart で配布されており、特定モー ドのオペレーションを表す事前定義のランレベルを実装していました。このランレベルは 0 から 6 まで の数字で表され、システム管理者が各ランレベルを有効にしたときに実行するシステムサービスが定義 されていました。Red Hat Enterprise Linux 7 では、ランレベルの概念が systemd ターゲットに代わって います。
Red Hat Enterprise Linux 7 では、以前のシステムリリースの標準ランレベルと類似する定義済みター
ゲットが多数同梱されています。互換性の理由から、このようなターゲットのエイリアスも SysV ラン レベルに直接マッピングします。
以下の表では、SysV ランレベルとそれに対応する systemd ターゲットの完全リストを紹介します。
表
表3.6 SysV ランレベルとランレベルと systemd ターゲットの比較ターゲットの比較 ランレベル
ランレベル ターゲットユニットターゲットユニット 説明説明
0 runlevel0.target,
poweroff.target
システムをシャットダウンし、電 源を切ります。
1 runlevel1.target,
rescue.target
レスキューシェルを設定します。
2 runlevel2.target,
multi-user.target
非グラフィカルなマルチユーザー システムを設定します。
3 runlevel3.target,
multi-user.target
非グラフィカルなマルチユーザー システムを設定します。
4 runlevel4.target,
multi-user.target
非グラフィカルなマルチユーザー システムを設定します。
5 runlevel5.target,
graphical.target
グラフィカルなマルチユーザーシ ステムを設定します。
6 runlevel6.target,
reboot.target
システムをシャットダウンして再 起動します。
以下の表は、SysV init コマンドと systemctl と比較しています。systemctl ユーティリティーを使用し
て、systemd ターゲットを表示、変更、または設定します。
重要 重要
runlevel コマンドおよび telinit コマンドは今もシステムで利用でき、期待どおりに機能 しますが、このコマンドは互換性の目的で同梱されているため、なるべく使用しないで ください。
表
表3.7 SysV init コマンドとコマンドと systemctl の比較の比較 古いコマンド
古いコマンド 新しいコマンド新しいコマンド 説明説明 runlevel systemctl list-units --type
target
現在読み込まれているターゲット ユニットを一覧表示します。
telinit runlevel systemctl isolate name.target
現在のターゲットを変更します。
関連情報 関連情報
man sysv init
man upstart init man systemctl
3.3.2. デフォルトターゲットの表示
デフォルトのターゲットユニットは /etc/systemd/system/default.target ファイルで表されます。
手順 手順
デフォルトでどのターゲットユニットが使用されるかを判断するには、次のコマンドを実行し ます。
$ systemctl get-default graphical.target
シンボリックリンクを使用してデフォルトのターゲットを確認するには、次のコマンドを実行 します。
$ ls -l /lib/systemd/system/default.target
3.3.3. ターゲットユニットの表示
デフォルトでは、systemctl list-units コマンドは、アクティブなユニットのみを表示します。
手順 手順
状態に関係なく読み込み済みのユニットをすべて表示するには、以下のコマンドを実行しま す。
$ systemctl list-units --type target --all
現在読み込み済みの全ターゲットユニットの一覧を表示するには、以下のコマンドを実行しま す。
$ systemctl list-units --type target
UNIT LOAD ACTIVE SUB DESCRIPTION basic.target loaded active active Basic System
cryptsetup.target loaded active active Encrypted Volumes getty.target loaded active active Login Prompts
graphical.target loaded active active Graphical Interface local-fs-pre.target loaded active active Local File Systems (Pre) local-fs.target loaded active active Local File Systems
multi-user.target loaded active active Multi-User System network.target loaded active active Network
paths.target loaded active active Paths
remote-fs.target loaded active active Remote File Systems sockets.target loaded active active Sockets
sound.target loaded active active Sound Card
spice-vdagentd.target loaded active active Agent daemon for Spice guests swap.target loaded active active Swap
sysinit.target loaded active active System Initialization
timers.target loaded active active Timers
LOAD = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB = The low-level unit activation state, values depend on unit type.
17 loaded units listed.
3.3.4. デフォルトターゲットの変更
デフォルトのターゲットユニットは /etc/systemd/system/default.target ファイルで表されます。以下 の手順では、systemctl コマンドを使用して、デフォルトのターゲットを変更する方法を説明します。
手順 手順
1. デフォルトのターゲットユニットを確認するには、次のコマンドを実行します。
# systemctl get-default
2. デフォルトで異なるターゲットユニットを使用するようにシステムを設定するには、次のコマ ンドを実行します。
# systemctl set-default multi-user.target rm /etc/systemd/system/default.target
ln -s /usr/lib/systemd/system/multi-user.target /etc/systemd/system/default.target このコマンドにより、/etc/systemd/system/default.target ファイル
が、/usr/lib/systemd/system/name.target へのシンボリックリンクに置き換わります。name は、使用するターゲットユニットの名前に置き換えてください。multi-user は、デフォルトで 使用するターゲットユニット名に置き換えます。
3. 再起動します。
# reboot
3.3.5. シンボリックリンクを使用したデフォルトのターゲットの変更
以下の手順では、ターゲットへのシンボリックリンクを作成して、デフォルトのターゲットを変更する 方法を説明します。
手順 手順
1. デフォルトのターゲットユニットを確認するには、次のコマンドを実行します。
# ls /lib/systemd/system/default.target -l
2. シンボリックリンクを作成するには、以下を行います。
# ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target 3. システムを再起動します。
# reboot
検証手順 検証手順
新規作成された default.target を確認します。
$ systemctl get-default multi-user.target
3.3.6. 現在のターゲットの変更
この手順では、systemctl コマンドを使用して、現行セッションでターゲットユニットを変更する方法 を説明します。
手順 手順
現行セッションで異なるターゲットユニットに変更するには、次のコマンドを実行します。
# systemctl isolate multi-user.target
このコマンドは、multi-user という名前のターゲットユニットと、その従属ユニットをすべて 起動し、その他のユニットを直ちに停止します。
multi-user は、デフォルトで使用するターゲットユニット名に置き換えます。
検証手順 検証手順
新規作成された default.target を確認します。
$ systemctl get-default multi-user.target
3.3.7. レスキューモードでの起動
レスキューモード
レスキューモードは、便利なシングルユーザー環境を提供し、通常の起動プロセスを完了できない状況 でのシステムの修復を可能にします。レスキューモードでは、システムはすべてのローカルファイルシ ステムのマウントと、いくつかの重要なシステムサービスの開始を試みますが、ネットワークインター フェースをアクティブにしたり、他のユーザーによるシステムへの同時ログインを許可したりすること はしません。
手順 手順
現在のターゲットを変更し、現行セッションでレスキューモードに入るには、以下を実行しま す。
# systemctl rescue
Broadcast message from root@localhost on pts/0 (Fri 2013-10-25 18:23:15 CEST):
The system is going down to rescue mode NOW!
このコマンドは systemctl isolate rescue.target と似ていますが、システムに現在ログイン中 の全ユーザーに情報メッセージを送信します。
systemd がメッセージを送信しないようにするには、コマンドラインオプション --no-wall を 付けて # systemctl --no-wall rescue を実行します。
3.3.8. 緊急モードでの起動
緊急モード
緊急モードは、可能な限り最小限の環境を提供し、レスキューモードに入れないシステム状態でのシス テムの修復を可能にします。緊急モードでは、システムは root ファイルシステムを読み込み専用でマ ウントし、他のローカルファイルシステムのマウントは試みません。また、ネットワークインター フェースのアクティブ化も行わず、限定的な必須サービスのみを起動します。
手順 手順
現在のターゲットを変更し、緊急モードに入るには、次のコマンドを実行します。
# systemctl emergency
このコマンドは systemctl isolate emergency.target と似ていますが、システムに現在ログイン中の全 ユーザーに情報メッセージを送信します。
systemd がメッセージを送信しないようにするには、--no-wall コマンドラインオプションを付けて #
systemctl --no-wall emergency を実行します。
3.4. システムのシャットダウン、サスペンド、および休止状態
Red Hat Enterprise Linux 7 では、systemctl ユーティリティーが、これまでのバージョンの Red Hat
Enterprise Linux システムで使用されていた多くの電源管理コマンドに置き換わっています。表3.8「電
源管理コマンドと systemctl の比較」に一覧表示されているコマンドは、互換性の理由からシステムで 利用できますが、可能な場合は systemctl の使用が推奨されます。
表
表3.8 電源管理コマンドと電源管理コマンドと systemctl の比較の比較 古いコマンド
古いコマンド 新しいコマンド新しいコマンド 説明説明
halt systemctl halt システムを停止します。
poweroff systemctl poweroff システムの電源を切ります。
reboot systemctl reboot システムを再起動します。
pm-suspend systemctl suspend システムをサスペンドします。
pm-hibernate systemctl hibernate システムを休止状態にします。
pm-suspend-hybrid systemctl hybrid-sleep システムを休止状態にしてサスペ ンドします。
3.4.1. システムのシャットダウン
systemctl ユーティリティーは、システムをシャットダウンするコマンドを提供します。ただし、従来
の shutdown コマンドもサポートされます。shutdown コマンドは、systemctl ユーティリティーを呼
び出してシャットダウンを実行しますが、time 引数もサポートするという利点があります。これは、計
画メンテナンスにとりわけ役立ち、システムシャットダウンの予定に関する警告にユーザーが対応する 時間をより長く確保できます。シャットダウンをキャンセルするオプションがあることも利点です。
systemctl コマンドの使用コマンドの使用
システムをシャットダウンし、マシンの電源を切るには、root で次のコマンドを実行します。
systemctl poweroff
マシンの電源を切らずにシステムをシャットダウンして停止するには、root で以下のコマンドを実行し ます。
systemctl halt
デフォルトでは、このコマンドのいずれかを実行すると、systemd が、システムに現在ログインしたす べてのユーザーに情報メッセージを送信します。systemd がメッセージを送信しないようにするには、
たとえば、コマンドラインオプション --no-wall を付けてコマンドを実行します。
systemctl --no-wall poweroff shutdown コマンドの使用コマンドの使用
指定した時間にシステムをシャットダウンしてマシンの電源を切るには、root で、以下の形式でコマン ドを実行します。
shutdown --poweroff hh:mm
hh:mm は 24 時間形式の時刻となります。新たなログインを防ぐために、システムをシャットダウンす
る 5 分前に /run/nologin ファイルが作成されます。時間引数を使用する場合は、コマンドに任意の
メッセージ wall message を付けることができます。
マシンの電源を切らずに、少し待ってシステムをシャットダウンして停止するには、root で以下の形式 のコマンドを実行します。
shutdown --halt +m
+m は遅らせる時間 (分) です。キーワード now は、+0 のエイリアスとなります。
保留中のシャットダウンは、root で以下のコマンドを実行するとキャンセルできます。
shutdown -c
詳細なコマンドオプションは、man ページの shutdown(8) を参照してください。
3.4.2. システムの再起動
システムを再起動するには、root で以下のコマンドを実行します。
systemctl reboot
デフォルトでは、このコマンドにより、systemd が、システムに現在ログインしたすべてのユーザーに 情報メッセージを送信します。systemd がこのメッセージを送信しないようにするには、コマンドライ ンオプション --no-wall を付けてこのコマンドを実行します。