systemdのdefault.targetとmulti-user.targetの違い|確認・変更方法
default.targetは「起動時に最初に目指す既定のtarget」、multi-user.targetは「複数ユーザー・主要サービスが利用できる非GUI中心のtarget」です。両者は同じものではなく、default.targetがmulti-user.targetを指している環境があります。
このページで分かること
- default.targetとmulti-user.targetの役割の違い
- 現在のデフォルトtargetの安全な確認方法
- set-defaultで何が変わるか
- isolateを安易に使わない方がよい理由
先に結論
default.targetは通常、multi-user.targetまたはgraphical.targetへのエイリアスです。まずsystemctl get-defaultで確認し、変更前には対象targetの存在と依存関係を確認します。
Unit設定もあわせて確認する
WantedByや依存関係を含むUnitファイルは、適用前にブラウザ上で確認できます。
default.targetとmulti-user.targetの違い
| 項目 | default.target | multi-user.target |
|---|---|---|
| 役割 | 起動時にsystemdが到達しようとする既定target | 複数ユーザー利用と主要なシステムサービスをまとめるtarget |
| 実体 | 一般に別targetへのエイリアス(symlink) | 実際のtarget unit |
| よくある向き先 | multi-user.target または graphical.target | サーバー系サービスなどを依存関係で取り込む |
| 確認 | systemctl get-default | systemctl list-dependencies multi-user.target |
default.targetとmulti-user.targetを「同義語」と考えないことが重要です。サーバーではdefault.targetがmulti-user.targetを指すことがありますが、GUI環境ではgraphical.targetを指す構成も一般的です。現在のdefault.targetを確認する
まず変更せず、現在の設定を確認します。
systemctl get-defaultは、default.targetがどのtargetへエイリアスされているかを確認する基本コマンドです。readlinkは実ファイル上のリンク先確認に使えますが、ディストリビューションや配置によって見え方が異なるため、まずsystemctlの結果を基準にします。
systemctl get-defaultの結果を控えておけば、切り戻し先を明確にできます。multi-user.targetで何が起動対象になるか確認する
multi-user.target自体がサービスを直接実行するのではなく、依存関係を通じて複数のUnitを取り込みます。
特定サービスが通常起動へ紐付いているか確認したい場合は、is-enabledとWantedBy側のリンクも確認します。
デフォルトtargetを変更する
恒久的なデフォルトtargetの変更にはsystemctl set-defaultを使います。通常はdefault.targetのエイリアス先が変更され、次回以降の起動時に影響します。
元へ戻す場合は、作業前に記録したtargetへ戻します。
systemctl isolateはset-defaultと別物
set-defaultは次回以降の既定targetを変更します。一方、systemctl isolate TARGETは現在のシステムをそのtargetへ切り替えようとし、対象targetに不要なUnitを停止することがあります。
| コマンド | 主な影響 | 注意点 |
|---|---|---|
systemctl set-default TARGET | 次回以降の起動時の既定target | 変更後にget-defaultで確認 |
systemctl isolate TARGET | 現在稼働中のUnit構成をtargetへ切替 | サービス停止や接続断につながる可能性 |
isolateは現在のセッションに影響する可能性があります。SSH経由の本番作業では、必要Unit・コンソールアクセス・復旧手段を確認せず実行しない方が安全です。実行前チェック
- 現在値を
systemctl get-defaultで記録する - 変更先targetが存在するか
systemctl statusで確認する list-dependenciesで必要サービスが含まれるか確認する- リモート接続ならSSH・ネットワーク維持への影響を確認する
set-default後に再度get-defaultで確認する- 切り戻し用の元target名を残す
systemctl list-dependencies multi-user.target で実環境を確認します。