Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

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 ターゲットが表示されています。

表10.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 ターゲットを表示、変更、または設定するには、表10.7「SysV init コマンドと systemctl の比較」 および以下のセクションでの説明通りに systemctl ユーティリティーを使用します。runlevel および telinit の各コマンドはシステムで利用可能なままで、期待どおりに機能しますが、これらが含まれているのは互換性が目的であり、使用は避けてください。

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

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

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 では、レスキューモードは シングルユーザーモード と同等であり、root パスワードを必要とします。
現在のターゲットを変更し、現行セッションでレスキューモードに入るには、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