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

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

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

このページで分かること

  • WantedByが作用するタイミング
  • enable・start・--nowの違い
  • 自動起動の確認と解除方法

先に結論

このページの役割: このページは、自動起動の紐付けと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すると何が起きるか

サービスをenableすると、通常はmulti-user.target.wants配下にUnitファイルへのシンボリックリンクが作られます。これにより、次回の通常起動時にサービスが起動対象へ加わります。

sudo systemctl enable example.service systemctl is-enabled example.service systemctl list-dependencies multi-user.target | grep example

実際のリンク先はディストリビューションやUnitの配置場所によって異なります。次のコマンドで確認できます。

systemctl cat example.service systemctl show example.service -p UnitFileState -p FragmentPath

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

よくある勘違い

安全な変更手順

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をレビュー