systemctl startでUnit not foundになる原因と確認手順
systemctl start example.serviceの実行時にUnit example.service not found、Unit example.service could not be foundなどが出たら、Unit名、systemdが探索する場所、読込み状態、system/userの区別を確認します。設定ファイルを新規作成する前に、既存のUnitを見落としていないか切り分けます。
このページの目的
start時にUnit定義を見つけられない問題を対象にします。Unitは見つかるが実行に失敗する場合、enable自体が失敗する場合は各専用ガイドに分けます。
最初にやること
systemctl status、systemctl list-unit-files、systemctl catを使い、サービス名の誤りか、Unit未配置か、読み込みが古いのかを確認します。
関連するsystemdトラブル・設定ガイド
systemdが起動しない・failedになる
Unitが読み込まれた後、実行条件やアプリ起動が失敗する場合の全体切り分けです。
原因を切り分ける → 自動起動設定enableでFailed to enable
Unitの有効化でエラーになる場合、static・masked・Install指定などを確認します。
enable失敗を確認 → 設定反映daemon-reloadの必要条件
Unitファイルの作成・編集後に、何を再読込するかを確認します。
反映方法を確認 →新しいUnitを作る前に
サービス名・Unit定義・実行対象を確認し、既存のパッケージ管理・構成管理から逸脱したUnitを増やさないようにします。
Unit not foundはアプリの起動エラーと違う
systemdが指定したUnitを解決できないと、Unit … not foundなどが表示されます。これは通常、実行プログラムが異常終了したことではありません。まずUnit名とUnit定義を特定してから、構文・実行ファイル・権限を調べます。
最初に状態とUnitの有無を確認する
LoadState=not-foundならUnit定義を解決できていない可能性があります。FragmentPathやsystemctl catの結果と照合し、systemdが実際に参照しているファイルを確認します。systemctl list-unitsはロード済みUnitの一覧なので、ディスク上のUnitファイル全体を見るlist-unit-filesと意味が異なります。
1. Unit名とサービス種別を確認する
.serviceを省略するとserviceとして補われるコマンドもありますが、.socket・.timer・.mountなどを扱う場合は種別を明示してください。テンプレートUnitはexample@.serviceとexample@instance.serviceの区別があります。
実際のサービス名が製品名と異なる場合や、パッケージ更新でUnit名が変わった場合があります。まず候補一覧とパッケージのドキュメントを確認します。
2. 配置先・インストール状態・管理元を確認する
ディストリビューションによって配置先や/libと/usr/libの関係が異なります。例示されたパスが存在しないだけで異常とは言えません。systemctl catが参照できないなら、ソフトウェアのインストール有無・提供パッケージ・構成管理の適用履歴を確認します。
3. Unitを追加・編集したならdaemon-reloadを検討
daemon-reloadはsystemdのUnit構成を再読込します。サービスを起動する操作ではありません。Unit名の誤り、未インストール、間違った探索パス、system/userの相違は、再読込だけで解決しない場合があります。Unitファイルの編集・再読込の詳しい違いはdaemon-reloadガイドを参照してください。
4. systemとuserのスコープを分ける
systemctlとsystemctl --userは別のマネージャーに問い合わせます。ユーザー用Unitは一般に~/.config/systemd/user/等の探索先を使います。user Unitを変更した場合は、そのユーザーのログイン環境でsystemctl --user daemon-reloadが必要になることがあります。
sudo systemctl --userを安易に使うと別ユーザーの管理領域やセッションにアクセスしてしまうため、実行者とユーザーセッションを確認します。コンテナなどsystemdがPID 1ではない環境では、そもそもsystemctlが利用できない場合があります。
結果に応じた次の対応
| 確認結果 | 次の対応 |
|---|---|
| 単なる名前・拡張子・テンプレート名の誤り | 既存Unitの正式名を特定し、意図する対象を指定して再確認する |
| ファイルを新規追加した直後 | 保存場所・所有者・読み取り可否を確認し、systemd管理Unitならdaemon-reload後にcatで再確認 |
| パッケージが未インストール・削除されている | パッケージ管理と変更記録を確認して正規のインストール・復旧手順を採用 |
--user側にUnitがある | ユーザー用マネージャーとセッション管理を用いて状態確認・起動を行う |
| Unitは見つかったが起動しない | 起動障害ガイドでExecStart・journal・依存関係を確認 |
Failed to enableだけが出る | enable失敗ガイドでInstall設定・masked・static等を確認 |
修正後はUnit解決とアプリ動作を分けて確認
LoadState=loadedになってもサービスが正常稼働しているとは限りません。依存サービスやアプリ側のヘルスチェック・待受ポートを確認してください。問題が続く場合は、正式Unit名、探索先、パッケージ版、構成管理差分、journalをまとめて調査します。