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

systemctl daemon-reloadはいつ必要?restart・reloadとの違い

systemctl daemon-reload は、systemdマネージャーにUnitファイルを読み直させ、依存関係ツリーを再構築させる操作です。Unitファイルやdrop-inを手動で作成・変更したあとに、変更内容をsystemdへ認識させるために使います。

このページで分かること

  • daemon-reloadが必要な変更
  • restart・reloadとの違い
  • 変更後に何を確認するか
  • Unitの構文を適用前に検証する方法

先に結論

Unit定義を変更したら、まず構文確認 → daemon-reload → 必要に応じてrestart/start → status確認の順に分けると安全です。

sudo systemd-analyze verify /etc/systemd/system/example.service sudo systemctl daemon-reload sudo systemctl restart example.service systemctl status example.service --no-pager -l

変更前にUnitファイルを確認する

Unitを貼り付けて、ExecStart、依存関係、WantedBy、Restartなどの注意点を適用前に確認できます。

systemd Unitをレビュー

daemon-reloadはいつ必要か

代表例は、/etc/systemd/system/ 配下などのUnitファイルを手動で作成・編集したとき、drop-inを手動で変更したとき、Unitの依存関係や実行コマンドを変更したときです。daemon-reloadはUnit定義を読み直しますが、サービスプロセスそのものを自動で再起動する操作ではありません。

変更daemon-reloadその後
UnitファイルのExecStart=を変更必要restartで新しい定義を使って再起動
After=/Wants=/Requires=を変更必要依存関係を確認して必要なUnitを再起動
[Install]を変更enable/disableのやり直しを優先systemctl enable/disableは通常、リンク変更後にsystemdマネージャーの設定も再読込します。symlinkを手動変更した場合はdaemon-reloadも確認
アプリ自身の設定ファイルだけ変更通常は不要アプリが対応していればsystemctl reload、必要ならrestart
注意:daemon-reloadsystemctl reload example.service は別物です。前者はsystemd側のUnit定義、後者は対応しているサービス自身へ設定再読込を要求します。

daemon-reload・restart・reloadの違い

コマンド対象主な用途
systemctl daemon-reloadsystemdマネージャーUnitファイルを再読込し依存関係ツリーを再構築
systemctl restart example.serviceサービス停止・起動して新しい実行状態へ切り替える
systemctl reload example.serviceサービスサービス固有のreload処理を要求。通常は設定再読込が目的だが、具体的な動作と影響はサービス実装を確認

restart だけで「systemdがUnitファイル変更を必ず再読込してくれる」と決めつけず、Unit定義変更時はdaemon-reloadを明示して確認します。

安全な変更手順

sudo cp -a /etc/systemd/system/example.service /etc/systemd/system/example.service.bak sudo editor /etc/systemd/system/example.service sudo systemd-analyze verify /etc/systemd/system/example.service sudo systemctl daemon-reload systemctl cat example.service systemctl show example.service -p FragmentPath -p DropInPaths sudo systemctl restart example.service systemctl status example.service --no-pager -l journalctl -u example.service -n 50 --no-pager
実務ポイント:変更したファイルとsystemdが実際に読んでいるファイルが同じかを systemctl catFragmentPath で確認すると、「別パスを編集していた」事故を減らせます。

変更が反映されたか確認する

systemctl cat example.service systemctl show example.service -p FragmentPath -p DropInPaths -p ExecStart systemctl status example.service --no-pager -l

依存関係を変えた場合は、Unitの表示だけでなく依存関係側も確認します。

systemctl list-dependencies example.service systemctl show example.service -p After -p Wants -p Requires

よくある勘違い

公式ドキュメント

Unit変更を適用する前にレビュー

変更後のUnitを貼り付けて、危険な設定や確認ポイントをチェックできます。

systemd Unitをレビュー