WantedBy=multi-user.targetとは?systemd自動起動の仕組みと確認方法
WantedBy=multi-user.targetは、サービスを通常のマルチユーザー起動へ紐付けるための設定です。書いただけでは自動起動にならず、systemctl enableが必要です。
default.targetとの違いや、現在どのtargetが既定かはdefault.targetとmulti-user.targetの違いで確認できます。このページで分かること
- WantedByが作用するタイミング
- enable・start・--nowの違い
- 自動起動の確認と解除方法
- enableで作成されるシンボリックリンクの確認方法
- enabled・disabled・staticの見分け方
先に結論
WantedBy=multi-user.targetは「起動時にこのサービスを開始するリンクを、enable時に作る」という意味です。Unitの起動順序や依存関係を直接指定する設定ではありません。
自分のUnitファイルを確認する
Unitを貼り付けて、WantedBy、自動起動、依存関係、再起動設定の注意点を確認できます。
WantedBy=multi-user.targetの意味
WantedBy=は[Install]セクションに記述し、systemctl enableを実行したときに、どのtargetやUnitから弱い依存関係で呼び出されるようにするかを定義します。
multi-user.targetは、一般的なサーバー用途で多くのシステムサービスが起動した状態を表すtargetです。GUIを必要としない常駐サービスでは、よく利用されます。
WantedBy=は起動順序を指定しません。別Unitより後に起動したい場合はAfter=、相手も起動対象へ加えたい場合はWants=やRequires=を別途検討します。enableすると何が起きるか
systemctl enableは、Unitをその場で起動する操作ではありません。Unitの[Install]セクションを読み、WantedBy=やRequiredBy=などに基づいて、起動時の依存関係に使うシンボリックリンクを作成します。
WantedBy=multi-user.targetなら、一般的なsystem scopeでは次のようなリンクが作られる構成がよくあります。
systemctl enableの出力と確認コマンドで実環境を確認します。enable後に確認するコマンド
| 確認 | 見るもの | 判断 |
|---|---|---|
is-enabled | Unitのenable状態 | enabledならenable用リンク等が有効。staticなら通常のenable対象ではない |
show -p UnitFileState | Unit file state | 自動起動設定の状態を機械的に確認 |
list-dependencies | targetから見た依存関係 | multi-user.target側からUnitが取り込まれているか確認 |
ls -l | 実際のsymlink | リンク先が想定したUnitか確認 |
is-enabledとリンク先、さらに現在の稼働状態はis-activeで分けて確認すると、設定と実行状態を混同しにくくなります。enableしても今すぐ起動するとは限らない
systemctl enable example.serviceは通常、現在のサービス起動を目的としません。今すぐ起動も行うなら--nowを付けます。
start・enable・--nowの違い
| 操作 | 現在の起動 | 次回起動時 |
|---|---|---|
systemctl start | 起動する | 自動起動設定は変えない |
systemctl enable | 通常は起動しない | 自動起動を有効化 |
systemctl enable --now | 起動する | 自動起動も有効化 |
systemctl disable --now | 停止する | 自動起動も無効化 |
設定例と確認コマンド
この例では、ネットワークオンライン用targetを起動対象へ加え、その後にサービスを起動します。enableすると通常のマルチユーザー起動へ紐付きます。
staticだから「自動起動できないサービス」とは限りません。他UnitからWants=/Requires=で取り込まれたり、socket・timer・D-Busなど別の仕組みで起動されるUnitがあります。| 主な状態 | 意味の目安 | 次に見るもの |
|---|---|---|
enabled | enable用のリンク等が有効 | is-activeで現在の稼働も確認 |
disabled | enable用リンクが現在は有効でない | [Install]と起動要件を確認 |
static | 通常のenable用設定を持たず、他Unitからの依存や各種activationで起動されることがある | systemctl catと依存関係を確認 |
systemctl is-enabledの結果は、単純なON/OFFだけではありません。特にstaticを「故障」と誤認しないことが重要です。
enabled・disabled・staticの違い
よくある勘違い
- Unitへ
WantedBy=を書いただけで自動起動になると思う enableすれば現在も起動すると考えるWantedBy=が起動順序や通信可能状態を保証すると考える- Unit変更後に
daemon-reloadを忘れる - テンプレートUnitやstatic Unitにも同じ使い方ができると思う
安全な変更手順
is-enabled、現在の稼働状態はis-activeで別々に確認します。