10.3. systemd ターゲットでの作業
以前のバージョンの Red Hat Enterprise Linux は、SysV init または Upstart で配布されており、特定モードのオペレーションを表す事前定義の ランレベル を実装していました。このランレベルは 0 から 6 までの数字で表され、システム管理者が各ランレベルを有効にしたときに実行するシステムサービスが定義されていました。Red Hat Enterprise Linux 7 では、ランレベルの概念が systemd ターゲット に代わっています。
systemd ターゲットは ターゲットユニット で表現されます。ターゲットユニットは .target
ファイル拡張子で終わり、その唯一の目的は依存関係の連鎖で他の systemd ユニットをグループ化することです。たとえば、グラフィカルセッションの開始に使用する 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
という別のターゲットユニットをアクティブにします。
Red Hat Enterprise Linux 7 では、以前のシステムリリースの標準ランレベルと類似する定義済みターゲットが多数同梱されています。互換性の理由から、このようなターゲットのエイリアスも SysV ランレベルに直接マッピングします。表10.6「SysV ランレベルと systemd ターゲットの比較」 SysV ランレベルとそれに対応する systemd ターゲットの完全リストを提供します。
ランレベル | ターゲットユニット | 詳細 |
---|---|---|
|
| システムをシャットダウンし、電源を切ります。 |
|
| レスキューシェルを設定します。 |
|
| 非グラフィカルなマルチユーザーシステムを設定します。 |
|
| 非グラフィカルなマルチユーザーシステムを設定します。 |
|
| 非グラフィカルなマルチユーザーシステムを設定します。 |
|
| グラフィカルなマルチユーザーシステムを設定します。 |
|
| システムをシャットダウンして再起動します。 |
systemd ターゲットを表示、変更、または設定するには、表10.7「SysV init コマンドと systemctl の比較」 および以下のセクションの説明に従って systemctl
ユーティリティーを使用します。runlevel
コマンドおよび telinit
コマンドは今も利用でき、期待どおりに機能しますが、このコマンドは互換性のために同梱されているため、なるべく使用しないでください。
古いコマンド | 新しいコマンド | 詳細 |
---|---|---|
|
| 現在読み込まれているターゲットユニットをリスト表示します。 |
|
| 現在のターゲットを変更します。 |
10.3.1. デフォルトターゲットの表示
デフォルトでどのターゲットユニットが使用されるかを決定するには、以下のコマンドを実行します。
systemctl get-default
このコマンドは、/etc/systemd/system/default.target
にあるシンボリックリンクを解決して、結果を表示します。デフォルトのターゲット変更する方法は 「デフォルトターゲットの変更」 を参照してください。現在、読み込み済みのターゲットユニットをリスト表示する方法は 「現在のターゲットの表示」 を参照してください。
例10.10 デフォルトターゲットの表示
デフォルトのターゲットユニットを表示するには、以下のコマンドを実行します。
~]$ systemctl get-default
graphical.target
10.3.2. 現在のターゲットの表示
読み込み済みのターゲットユニットのリストを表示するには、以下のコマンドを実行します。
systemctl list-units --type target
このコマンドを実行すると、各ターゲットユニットの正式名 (UNIT
) の後に、そのユニットが読み込まれているかどうか (LOAD
)、そのユニットファイルアクティベーションの状態の概要 (ACTIVE
) および詳細 (SUB
) な状態、簡単な説明 (DESCRIPTION
) が表示されます。
デフォルトでは、systemctl list-units
コマンドは、アクティブなユニットのみを表示します。状態に関係なく読み込み済みユニットをすべて表示する場合は、コマンドラインオプションの --all
または -a
を付けて、以下のコマンドを実行します。
systemctl list-units --type target --all
デフォルトターゲットの表示方法は、「デフォルトターゲットの表示」 を参照してください。現在のターゲットを変更する方法は、「現在のターゲットの変更」 を参照してください。
例10.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'.
10.3.3. デフォルトターゲットの変更
システムがデフォルトで異なるターゲットユニットを使用するように設定するには、root
で次のコマンドを実行します。
systemctl set-default name.target
name を、デフォルトで使用するターゲットユニットの名前 (multi-user
など) に置き換えます。このコマンドにより、/etc/systemd/system/default.target
ファイルが、/usr/lib/systemd/system/name.target
へのシンボリックリンクに置き換わります。name は、使用するターゲットユニットの名前になります。現在のターゲットを変更する方法は、「現在のターゲットの変更」 を参照してください。現在、読み込み済みのターゲットユニットをリスト表示する方法は 「現在のターゲットの表示」 を参照してください。
例10.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'
10.3.4. 現在のターゲットの変更
現行セッションで異なるターゲットユニットに変更するには、root
で次のコマンドを実行します。
systemctl isolate name.target
name を、使用するターゲットユニットの名前 (multi-user
など) に置き換えます。このコマンドは、name という名前のターゲットユニットと、その従属ユニットをすべて起動し、その他のユニットを直ちに停止します。デフォルトのターゲット変更する方法は 「デフォルトターゲットの変更」 を参照してください。現在、読み込み済みのターゲットユニットをリスト表示する方法は 「現在のターゲットの表示」 を参照してください。
例10.13 現在のターゲットの変更
グラフィカルユーザーインターフェイスを無効にし、現行セッションで multi-user.target
ユニットに変更するには、root
で以下のコマンドを実行します。
~]# systemctl isolate multi-user.target
10.3.5. レスキューモードへの変更
レスキューモード は、便利なシングルユーザー環境を提供し、通常の起動プロセスを完了できない状況でのシステムの修復を可能にします。レスキューモードでは、システムはすべてのローカルファイルシステムのマウントと、いくつかの重要なシステムサービスの開始を試みますが、ネットワークインターフェイスをアクティブにしたり、他のユーザーによるシステムへの同時ログインを許可したりすることはしません。Red Hat Enterprise Linux 7 では、レスキューモードはシングルユーザーモードと同等であり、single user mode パスワードを必要とします。
現在のターゲットを変更し、現行セッションでレスキューモードに入るには、root
で次のコマンドを実行します。
systemctl rescue
このコマンドは systemctl isolate rescue.target
と似ていますが、システムに現在ログインしているすべてのユーザーに情報メッセージを送信します。systemd がこのメッセージを送信しないようにするには、コマンドラインオプション --no-wall
を付けてこのコマンドを実行します。
systemctl --no-wall rescue
緊急モードに入る方法は、「緊急モードへの変更」 を参照してください。
例10.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!
10.3.6. 緊急モードへの変更
緊急モード は、可能な限り最小限の環境を提供し、レスキューモードに入れないシステム状態でのシステムの修復を可能にします。緊急モードでは、システムは root ファイルシステムを読み込み専用でマウントし、他のローカルファイルシステムのマウントは試みません。また、ネットワークインターフェイスのアクティブ化も行わず、限定的な必須サービスのみを起動します。Red Hat Enterprise Linux 7 では、緊急モードでは root パスワードが必要です。
現在のターゲットを変更し、緊急モードに入るには、root
で次のコマンドを実行します。
systemctl emergency
このコマンドは systemctl isolate emergency.target
と似ていますが、システムに現在ログインしているすべてのユーザーに情報メッセージを送信します。systemd がこのメッセージを送信しないようにするには、コマンドラインオプション --no-wall
を付けてこのコマンドを実行します。
systemctl --no-wall emergency
レスキューモードに入る方法は、「レスキューモードへの変更」 を参照してください。
例10.15 緊急モードへの変更
現在システムにログインしている全ユーザーにメッセージを送信せずに緊急モードに入るには、root
で以下のコマンドを実行します。
~]# systemctl --no-wall emergency