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 -xe | grep 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-enabled
とsystemctl status
を最初に確認- ユニットファイルに
[Install]
があるかをチェック - 依存関係や SELinux の制約にも注意
これらの確認と修正で、多くの「systemd サービスが自動起動しない」問題は解決できます。
あわせて読みたい


Linuxにおけるsystemdとinitとは?違いと概念を解説
Linuxシステムの管理には、主にsystemdとinitという2つの重要なコンポーネントがあります。これらは、システムの起動プロセスやサービス管理を担う役割を果たしますが、…
あわせて読みたい


Linuxのランレベルとsystemdターゲットを理解する
Linuxのランレベルとsystemdターゲットとは? Linuxシステムで、ランレベルとsystemdターゲットは、システムの動作モードを定義する重要な設定です。システムの稼働状態…