インフラ作業支援ラボInfra Support Lab← ガイド一覧← 戻る

WantedBy=multi-user.targetとは?systemd自動起動の仕組みと確認方法

WantedBy=multi-user.targetは、サービスを通常のマルチユーザー起動へ紐付けるための設定です。書いただけでは自動起動にならず、systemctl enableが必要です。

multi-user.target自体との関係: default.targetとの違いや、現在どのtargetが既定かはdefault.targetとmulti-user.targetの違いで確認できます。

このページで分かること

  • WantedByが作用するタイミング
  • enable・start・--nowの違い
  • 自動起動の確認と解除方法
  • enableで作成されるシンボリックリンクの確認方法
  • enabled・disabled・staticの見分け方

先に結論

このページの役割: このページは、自動起動の紐付けとenableの内部動作に特化しています。Unit全体の作り方はsystemd Unit設定ガイドを参照してください。

WantedBy=multi-user.targetは「起動時にこのサービスを開始するリンクを、enable時に作る」という意味です。Unitの起動順序や依存関係を直接指定する設定ではありません。

自分のUnitファイルを確認する

Unitを貼り付けて、WantedBy、自動起動、依存関係、再起動設定の注意点を確認できます。

systemd Unitをレビュー

WantedBy=multi-user.targetの意味

WantedBy=[Install]セクションに記述し、systemctl enableを実行したときに、どのtargetやUnitから弱い依存関係で呼び出されるようにするかを定義します。

[Install] WantedBy=multi-user.target

multi-user.targetは、一般的なサーバー用途で多くのシステムサービスが起動した状態を表すtargetです。GUIを必要としない常駐サービスでは、よく利用されます。

重要: WantedBy=は起動順序を指定しません。別Unitより後に起動したい場合はAfter=、相手も起動対象へ加えたい場合はWants=Requires=を別途検討します。

enableすると何が起きるか

systemctl enableは、Unitをその場で起動する操作ではありません。Unitの[Install]セクションを読み、WantedBy=RequiredBy=などに基づいて、起動時の依存関係に使うシンボリックリンクを作成します。

sudo systemctl enable example.service

WantedBy=multi-user.targetなら、一般的なsystem scopeでは次のようなリンクが作られる構成がよくあります。

/etc/systemd/system/multi-user.target.wants/example.service -> /etc/systemd/system/example.service
パスを決め打ちしない: Unit本体の配置場所やディストリビューション、system scope / user scopeによって実際のリンク先・配置は変わります。systemctl enableの出力と確認コマンドで実環境を確認します。

enable後に確認するコマンド

systemctl is-enabled example.service systemctl show example.service -p UnitFileState -p FragmentPath systemctl list-dependencies multi-user.target | grep -F example.service ls -l /etc/systemd/system/multi-user.target.wants/example.service
確認見るもの判断
is-enabledUnitのenable状態enabledならenable用リンク等が有効。staticなら通常のenable対象ではない
show -p UnitFileStateUnit file state自動起動設定の状態を機械的に確認
list-dependenciestargetから見た依存関係multi-user.target側からUnitが取り込まれているか確認
ls -l実際のsymlinkリンク先が想定したUnitか確認
実務ではここまで確認: 「enableコマンドが成功した」だけで終わらせず、is-enabledとリンク先、さらに現在の稼働状態はis-activeで分けて確認すると、設定と実行状態を混同しにくくなります。

enableしても今すぐ起動するとは限らない

systemctl enable example.serviceは通常、現在のサービス起動を目的としません。今すぐ起動も行うなら--nowを付けます。

sudo systemctl enable --now example.service systemctl is-enabled example.service systemctl is-active example.service

start・enable・--nowの違い

操作現在の起動次回起動時
systemctl start起動する自動起動設定は変えない
systemctl enable通常は起動しない自動起動を有効化
systemctl enable --now起動する自動起動も有効化
systemctl disable --now停止する自動起動も無効化

設定例と確認コマンド

[Unit] Description=Example API After=network-online.target Wants=network-online.target [Service] Type=simple User=appuser ExecStart=/usr/local/bin/example-api Restart=on-failure [Install] WantedBy=multi-user.target

この例では、ネットワークオンライン用targetを起動対象へ加え、その後にサービスを起動します。enableすると通常のマルチユーザー起動へ紐付きます。

sudo systemd-analyze verify /etc/systemd/system/example.service sudo systemctl daemon-reload sudo systemctl enable --now example.service systemctl is-enabled example.service systemctl is-active example.service
注意: staticだから「自動起動できないサービス」とは限りません。他UnitからWants=/Requires=で取り込まれたり、socket・timer・D-Busなど別の仕組みで起動されるUnitがあります。
systemctl is-enabled example.service systemctl cat example.service systemctl show example.service -p UnitFileState -p FragmentPath
主な状態意味の目安次に見るもの
enabledenable用のリンク等が有効is-activeで現在の稼働も確認
disabledenable用リンクが現在は有効でない[Install]と起動要件を確認
static通常のenable用設定を持たず、他Unitからの依存や各種activationで起動されることがあるsystemctl catと依存関係を確認

systemctl is-enabledの結果は、単純なON/OFFだけではありません。特にstaticを「故障」と誤認しないことが重要です。

enabled・disabled・staticの違い

よくある勘違い

安全な変更手順

sudo systemd-analyze verify /etc/systemd/system/example.service sudo systemctl daemon-reload sudo systemctl enable --now example.service systemctl status example.service --no-pager -l systemctl is-enabled example.service
確認ポイント: 自動起動の設定状態はis-enabled、現在の稼働状態はis-activeで別々に確認します。

自分のUnitファイルを確認する

Unitを貼り付けて、WantedBy、自動起動、依存関係、再起動設定の注意点を確認できます。

systemd Unitをレビュー