systemdによるターゲットの管理
systemdは個々のサービスの管理とともに、SysVinitのランレベルに相当するターゲット(target)を管理します。
systemdターゲット | SysVinitランレベル | 説明 |
---|---|---|
default.target | デフォルトランレベル | デフォルトターゲット |
poweroff.target | ランレベル 0 | 電源オフ |
rescue.target | ランレベル 1 | レスキューモード |
multi-user.target | ランレベル 3 | マルチユーザモード |
graphical.target | ランレベル 5 | グラフィカルモード(マルチユーザ+GUI) |
reboot.target | ランレベル 6 | システム再起動 |
システムの起動時のシーケンス
システムの起動時にsystemdはdefault.targetをスタートします。通常、default.targetはgraphical.targetまたはmulti-user.targetへのシンボリックリンクです。default.targetはsystemctl
のサブコマンドget-default
で表示、set-default
で変更ができます。
# systemctl get-default ← デフォルトターゲットを表示 graphical.target # systemctl set-default multi-user.target ← デフォルトターゲットをmulti-userに変更 rm '/etc/systemd/system/default.target' ln -s '/usr/lib/systemd/system/multi-user.target' '/etc/systemd/system/default.target'
ブートローダのカーネルコマンドライン オプションsystemd.unitによって、systemd.unit=multi-user.target
のように指定することもできます。この場合はdefault.targetのシンボリックリンクより優先されます。
現在のターゲットの変更(ランレベルの変更に相当)
現在のターゲットを変更するには、サブコマンドisolate
を使用します。isolate
は指定したターゲットおよびターゲットが依存するunitをスタートし、新しいターゲットでenableに設定されていない他のすべてのunitをストップします。
# runlevel ← 現在のターゲット(最後にロードされたターゲット)を確認 N 5 ← 最後にロードされたターゲットはgraphical.target(ランレベル5) # systemctl isolate multi-user.target ← multi-user.targetに変更(「init 3」でも可) # systemctl isolate graphical.target ← graphical.targetに変更(「init 5」でも可) # systemctl isolate poweroff.target ← poweroff.targetに変更(「init 0」でも可) # systemctl isolate reboot.target ← reboot.targetに変更(「init 6」でも可)
以下はそれぞれ、レスキューモード、マルチユーザモード、グラフィカルモードで立ち上げたときの画面の例です。
Welcome to rescue mode! Type "systemctl default" or ^D to enter default mode. The "journalctl -xb" to view system logs. Type "systemctl reboot" to reboot. Give root password for maintenance (or type Control-D to continue):
上記の画面で、rootユーザのパスワードを入力してログインします。
CentOS Linux 7 (Core) Kernel 3.10.0-229.el7.x86_64 on an x86_64 lpic-1 login:
以下に示すGRUB2の画面は、カーネルオプションにレスキューモードの指定を追加して起動する例です。
レスキューモードの指定を追加するには、起動直後に[e]キーを押して編集モードに入った後、カーネルオプションにsystemd.unit=rescue.target
を追加します。1行に収まらない場合には自動的に行末に「\
」が挿入され、続けて次の行に入力できます(systemd.unit=rescue.target
と指定する代わりに、SysVinitの場合と同じく1
を指定することも可能)。レスキューモードの指定を加えた後、[Ctrl-x]キーを押して起動します。