インフラ作業支援ラボInfra Support Lab← ガイド一覧← 戻る
問題発生時のトラブル解決ガイド

systemdサービスが起動しない・failedになる原因と確認手順

このページの目的

systemdサービスが起動しない原因を、Unitの読込み、構文、実行条件、アプリ自身の失敗の順に特定します。最終的なゴールは、最初の失敗箇所を1つに絞り、安全に再起動できる状態にすることです。

最初にやること

最初に systemctl statusjournalctl -u を確認します。そこで得た状態コードを起点に、構文検証、実行ユーザーでの手動実行、パスと権限の確認へ進みます。

このページの対象:このページは「手動で systemctl start しても起動しない」場合が対象です。再起動後だけ自動起動しない場合は、systemctl enable後に自動起動しないガイドを確認してください。

Unitファイルを実行前に確認

起動に失敗したUnitを貼り付けて、実行パス、権限、依存関係、再起動ループにつながる設定を確認できます。

systemd Unitをレビュー

最初に失敗の種類を分ける

最初に、次のどこで止まっているかを分けます。

systemctl status example.service --no-pager -l journalctl -u example.service -b --no-pager -n 100

よくある表示・症状から原因を絞る

表示された文言は原因そのものではなく、確認範囲を絞る手掛かりです。「考えられる原因」と「最初の確認方法」を対応させて確認します。

エラー・症状考えられる原因最初の確認方法
Unit example.service could not be foundUnit名の誤り、配置先違い、またはdaemon-reload未実施systemctl cat example.service とUnit配置先を確認
status=203/EXECExecStartの実行ファイルが存在しない、実行できない、またはshebangが不正namei -l、file、先頭行のshebangを確認
status=200/CHDIRWorkingDirectoryが存在しない、または実行ユーザーが到達できないnamei -l /path/to/workdir で各階層を確認
Permission deniedUser=の実行権限不足、親ディレクトリ権限、SELinux拒否などsudo -u 実行ユーザー でExecStart相当を手動実行
Start request repeated too quickly短時間に起動失敗を繰り返し、systemdの開始制限に達したjournalctl -u 対象.service -b で最初の失敗を確認
Failed with result exit-codeExecStartのプロセスが非0の終了コードで停止した同じユーザー・環境でExecStart相当を実行し終了コードとログを確認

原因を切り分ける確認手順

  1. Unitを再読込する

    sudo systemctl daemon-reload systemctl cat example.service

    編集したUnitが読み込まれているか確認します。

  2. 構文と参照先を検証する

    systemd-analyze verify /etc/systemd/system/example.service

    未知の設定名、依存関係、実行ファイルなどの警告を確認します。

  3. 状態とjournalを確認する

    systemctl status example.service --no-pager -l journalctl -u example.service -b --no-pager -n 100

    statusの要約だけで判断せず、同じ時刻のjournalを読みます。

  4. 実行ユーザーで手動実行する

    sudo -u appuser /usr/bin/python3 /opt/example/app.py

    systemdを介さず同じユーザー・同じコマンドで実行し、権限や環境依存を切り分けます。

  5. パスと権限を確認する

    namei -l /opt/example/app.py sudo -u appuser test -x /usr/bin/python3 && echo OK

    対象ファイルだけでなく、親ディレクトリを辿れるかも確認します。

確認結果から次の対応を決める

確認結果次の対応
手動実行も失敗アプリ、引数、設定ファイル、権限を修正します。
手動実行は成功環境変数、WorkingDirectory、User、systemdのサンドボックス設定を確認します。
起動後すぐ正常終了常駐プロセスか、Type=が適切か確認します。
再起動を繰り返す一時的に再起動設定を抑え、最初の失敗ログを確認します。

この症状で多い原因

修正後の確認と再発防止

sudo systemctl reset-failed example.service sudo systemctl restart example.service systemctl is-active example.service journalctl -u example.service -b --no-pager -n 50
起動できたことだけでなく、再起動後も意図した状態を維持するか、ログに継続的なエラーがないか確認します。

Unitファイルを実行前に確認

起動に失敗したUnitを貼り付けて、実行パス、権限、依存関係、再起動ループにつながる設定を確認できます。

systemd Unitをレビュー