9.3. systemd ターゲットでの作業

以前のバージョンの Red Hat Enterprise Linux は SysV init もしくは Upstart と配布されており、特定モードのオペレーションを表す事前定義の ランレベル を実装していました。これらのランレベルは 0 から 6 までの数字で表示され、システム管理者が特定のランレベルを有効にすると実行されるシステムサービスの選択によって定義されていました。Red Hat Enterprise Linux 7 では、ランレベルの概念は systemd targets に代わっています。
Systemd targets は target units で表されます。Target units は .target ファイル拡張子で終わり、その唯一の目的は依存関係の連鎖で他の systemd units をグループ化することです。たとえば、グラフィカルセッションの開始に使用される graphical.target ユニットは、GNOME Display Manager (gdm.service) や Accounts Service (accounts-daemon.service) といったシステムサービスを開始するとともに、multi-user.target ユニットもアクティブ化します。同様に multi-user.target ユニットは、NetworkManager (NetworkManager.service) や D-Bus (dbus.service) といった他の必須のシステムサービスを開始して、かつ basic.target という別の target unit をアクティブ化します。
Red Hat Enterprise Linux 7 では、以前のシステムのリリースにおける標準ランレベルとほぼ似通った多くの定義済みターゲットが同梱されています。互換性目的で、これらのターゲットを SysV ランレベルに直接マッピングするエイリアスも提供されています。表9.6「SysV ランレベルと systemd ターゲットの比較」 では、SysV ランレベルの完全なリストと対応する systemd ターゲットが表示されています。

表9.6 SysV ランレベルと systemd ターゲットの比較

ランレベルターゲットユニット詳細
0runlevel0.targetpoweroff.targetシステムをシャットダウンし、電源を切ります。
1runlevel1.targetrescue.targetレスキューシェルを設定します。
2runlevel2.targetmulti-user.target非グラフィカルな複数ユーザーシステムを設定します。
3runlevel3.targetmulti-user.target非グラフィカルな複数ユーザーシステムを設定します。
4runlevel4.targetmulti-user.target非グラフィカルな複数ユーザーシステムを設定します。
5runlevel5.targetgraphical.targetグラフィカルな複数ユーザーシステムを設定します。
6runlevel6.targetreboot.targetシステムをシャットダウンして再起動します。
systemd ターゲットを表示、変更、または設定するには、表9.7「SysV init コマンドと systemctl の比較」 および以下のセクションで説明するように systemctl ユーティリティーを使用します。runlevel および telinit の各コマンドはシステムで利用可能なままで、期待通りに機能しますが、これらが含まれているのは互換性が目的であり、使用は避けてください。

表9.7 SysV init コマンドと systemctl の比較

古いコマンド新しい コマンド詳細
runlevelsystemctl list-units --type target現在読み込まれているターゲットユニットを表示します。
telinit runlevelsystemctl isolate name.target現在のターゲットを変更します。

9.3.1. デフォルトターゲットの表示

デフォルトでどのターゲットユニットが使用されるかを決定するには、以下のコマンドを実行します。
systemctl get-default
このコマンドは /etc/systemd/system/default.target にあるシンボリックリンクを解決し、その結果を表示します。デフォルトのターゲットの変更方法については、「デフォルトターゲットの変更」 を参照してください。現在読み込まれているターゲットユニットを一覧表示する方法については、「現在のターゲットの表示」 を参照してください。

例9.10 デフォルトターゲットの表示

デフォルトのターゲットユニットを表示するには、以下を入力します。
~]$ systemctl get-default
graphical.target

9.3.2. 現在のターゲットの表示

読み込み済みの現在のターゲットユニットをすべて一覧表示するには、シェルプロンプトで以下のコマンドを入力します。
systemctl list-units --type target
このコマンドは、各ターゲットユニットの完全な名前 (UNIT) を表示し、その後にユニットが読み込み済みかどうか (LOAD)、高レベル (ACTIVE) および低レベル (SUB) のユニットのアクティベーション状態、および簡単な説明 (DESCRIPTION) が続きます。
デフォルトでは、systemctl list-units コマンドはアクティブなユニットのみを表示します。状態に関係なくすべての読み込み済みユニットを表示したい場合は、--all または -a のオプションを付けてコマンドを実行します。
systemctl list-units --type target --all
デフォルトのターゲットの表示方法については、「デフォルトターゲットの表示」 を参照してください。現在のターゲットの変更方法については、「現在のターゲットの変更」 を参照してください。

例9.11 現在のターゲットの表示

現在読み込み済みの全ターゲットユニットを一覧表示するには、以下のコマンドを実行します。
~]$ 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
time-sync.target      loaded active active System Time Synchronized
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. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.

9.3.3. デフォルトターゲットの変更

システムがデフォルトで異なるターゲットユニットを使用するよう設定するには、root でシェルプロンプトに以下を入力します。
systemctl set-default name.target
name をデフォルトで使用したいターゲットユニット名で (たとえば、multi-user) 置き換えます。このコマンドは、/etc/systemd/system/default.target ファイルを /usr/lib/systemd/system/name.target へのシンボリックリンクで置き換えます。ここでの name は、使用するターゲットユニット名になります。現在のターゲットの変更方法については、「現在のターゲットの変更」 を参照してください。現在読み込まれているターゲットユニットを一覧表示する方法については、「現在のターゲットの表示」 を参照してください。

例9.12 デフォルトターゲットの変更

システムがデフォルトで multi-user.target ユニットを使用するよう設定するには、root で以下のコマンドを使用します。
~]# 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'

9.3.4. 現在のターゲットの変更

現行のセッションで異なるターゲットユニットに変更するには、シェルプロンプトで root として以下を入力します。
systemctl isolate name.target
name を使用したいターゲットユニット名で (たとえば、multi-user) 置き換えます。このコマンドは、name という名前の付いたターゲットユニットとすべての依存ユニットを開始し、即座にその他すべてを停止します。デフォルトのターゲットの変更方法については、「デフォルトターゲットの変更」 を参照してください。現在、読み込み済みのターゲットユニットすべてを一覧表示する方法については、「現在のターゲットの表示」 を参照してください。

例9.13 現在のターゲットの変更

グラフィカルユーザーインターフェースをオフにして、現行セッションで multi-user.target ユニットに変更するには、root で以下のコマンドを使用します。
~]# systemctl isolate multi-user.target

9.3.5. レスキューモードへの変更

レスキューモード は、便利なシングルユーザーモードを提供し、通常の起動プロセスを完了できない状況におけるシステムの修復を可能にします。レスキューモードでは、システムはすべてのローカルファイルシステムのマウントといくつかの重要なシステムサービスの開始を試みますが、ネットワークインターフェースのアクティブ化や、システムに同時に他のユーザーによるログインを許可したりすることはしません。Red Hat Enterprise Linux 7 では、レスキューモードは シングルユーザーモード と同等であり、root パスワードを必要とします。
現在のターゲットを変更し、現行セッションでレスキューモードに入るには、root でシェルプロンプトに以下を入力します。
systemctl rescue
このコマンドは systemctl isolate rescue.target と似ていますが、現在システムにログインしているすべてのユーザーに通知メッセージも送信します。systemd がこのメッセージを送信しないようにするには、このコマンドに --no-wall オプションを付けて実行します。
systemctl --no-wall rescue
緊急モードに入る方法については、「緊急モードへの変更」 を参照してください。

例9.14 レスキューモードへの変更

現行セッションでレスキューモードに入るには、root で以下のコマンドを実行します。
~]# 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!

9.3.6. 緊急モードへの変更

緊急モード は可能な限り最小限の環境を提供し、レスキューモードに入れないシステムの状態におけるシステムの修復を可能にします。緊急モードでは、システムは root ファイルシステムを読み込み専用でマウントし、他のローカルファイルシステムのマウントは試みません。また、ネットワークインターフェースのアクティブ化も行わず、限定的な必須サービスのみを起動します。Red Hat Enterprise Linux 7 では、緊急モードに root パスワードを必要とします。
現在のターゲットを変更し、緊急モードに入るには、root でシェルプロンプトに以下を入力します。
systemctl emergency
このコマンドは systemctl isolate emergency.target と似ていますが、現在システムにログインしているすべてのユーザーに通知メッセージも送信します。systemd がこのメッセージを送信しないようにするには、このコマンドに --no-wall オプションを付けて実行します。
systemctl --no-wall emergency
レスキューモードに入る方法については、「レスキューモードへの変更」 を参照してください。

例9.15 緊急モードへの変更

現在システムにログインしている全ユーザーにメッセージを送信せずに緊急モードに入るには、root で以下のコマンドを実行します。
~]# systemctl --no-wall emergency