systemd サービスが自動起動しない/Enable されないときの原因と対処

  • URLをコピーしました!

Linux サーバーでは systemd によるサービスの自動起動設定が広く利用されています。しかし、意図したサービスが再起動後に自動で立ち上がらない、あるいは systemctl enable が効かない、といったトラブルに遭遇することがあります。
本記事では、systemd サービスが自動起動しない/Enable されないときの確認ポイントと解決方法をまとめます。

目次

よくある原因

  • サービスファイルが正しく存在しない/リンク切れ
  • systemctl enable が実行されていない/権限不足
  • サービスユニットの [Install] セクションに設定がない
  • 依存サービスの起動失敗
  • SELinux/AppArmor などによる制限
  • systemd デーモンのリロード忘れ

確認ポイントと正常/異常例

確認内容コマンド正常例異常例
サービスの有効化状態を確認systemctl is-enabled <サービス名>enabled と表示されるdisabled / static / masked
サービスの起動状態を確認systemctl status <サービス名>active (running) と表示inactive (dead) / failed
サービスファイルの存在確認systemctl cat <サービス名>/usr/lib/systemd/system/xxxx.service の内容が表示される「No such file or directory」エラー
シンボリックリンクの確認`ls -l /etc/systemd/system/*.wants/grep <サービス名>`/etc/systemd/system/multi-user.target.wants/xxx.service -> /usr/lib/systemd/system/xxx.service
インストールセクションの確認`systemctl cat <サービス名>grep Install -A3`[Install] セクションに WantedBy=multi-user.target などが記載
依存関係の確認systemctl list-dependencies <サービス名>必要なターゲットが並んで表示される依存先が failed 状態
SELinux ログ確認`journalctl -xegrep AVC`ログにエラーが出ていない
デーモンリロード確認systemctl daemon-reexec再実行後にエラーなし新しいユニットファイルが反映されない

解決方法

1. サービスを有効化する

sudo systemctl enable <サービス名>
  • 正常に有効化されると /etc/systemd/system/multi-user.target.wants/ 以下にリンクが作成されます。
  • enabled にならない場合は、ユニットファイルの [Install] セクションを確認してください。

2. サービスを起動/再起動する

sudo systemctl start <サービス名>
sudo systemctl restart <サービス名>
  • 状態が active (running) になれば正常です。
  • 依存サービスが落ちている場合は systemctl status で原因を確認します。

3. ユニットファイルを修正/確認する

  • /usr/lib/systemd/system/xxx.service または /etc/systemd/system/xxx.service を確認
  • [Install] セクションに以下のような記述が必要です:
[Install]
WantedBy=multi-user.target
  • 修正後は必ず systemctl daemon-reload を実行してください。

4. SELinux / AppArmor の確認

SELinux が原因の場合はログに avc: denied が残ります。
一時的に無効化して切り分け可能です:

sudo setenforce 0   # 一時的にPermissiveモード

その後、正しく起動する場合は SELinux ポリシーを調整してください。

5. デーモンのリロードを行う

ユニットファイル変更後は必ず以下を実行します:

sudo systemctl daemon-reload

反映されない場合は daemon-reexec で再実行してください:

sudo systemctl daemon-reexec

まとめ

  • systemctl is-enabledsystemctl status を最初に確認
  • ユニットファイルに [Install] があるかをチェック
  • 依存関係や SELinux の制約にも注意

これらの確認と修正で、多くの「systemd サービスが自動起動しない」問題は解決できます。

目次