MeWrite Docs

systemd: service failed to start

systemdで管理されるサービスの起動に失敗した場合のエラー

概要

systemdで管理されるサービス(デーモン)が起動に失敗した場合に表示されるエラーです。ExecStartの指定ミス、依存サービスの未起動、権限の問題など、さまざまな原因で発生します。

エラーメッセージ

Job for myapp.service failed because the control process exited with error code.
See "systemctl status myapp.service" and "journalctl -xeu myapp.service" for details.
● myapp.service - My Application
     Loaded: loaded (/etc/systemd/system/myapp.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Mon 2026-02-03 10:00:00 JST; 5s ago
    Process: 12345 ExecStart=/usr/local/bin/myapp (code=exited, status=1/FAILURE)

原因

  1. ExecStartのパスが不正: バイナリが存在しない、またはパスが間違っている
  2. 依存サービスが未起動: データベースやネットワークが準備できていない
  3. 権限の問題: 実行ユーザーに必要な権限がない
  4. 設定ファイルのエラー: アプリケーション自体の設定ファイルに問題がある
  5. ポートの競合: 別プロセスが同じポートを使用している

解決策

1. ログを確認して原因を特定

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# サービスのステータス確認
systemctl status myapp.service

# 詳細なログを確認
journalctl -xeu myapp.service

# リアルタイムでログを監視
journalctl -fu myapp.service

# 最近のログのみ表示
journalctl -u myapp.service --since "5 minutes ago"

2. ユニットファイルの修正

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# /etc/systemd/system/myapp.service
[Unit]
Description=My Application
After=network.target postgresql.service
Requires=postgresql.service

[Service]
Type=simple
User=myapp
Group=myapp
WorkingDirectory=/opt/myapp
ExecStart=/usr/local/bin/myapp --config /etc/myapp/config.yml
Restart=on-failure
RestartSec=5

# 環境変数
Environment=NODE_ENV=production
EnvironmentFile=/etc/myapp/env

# ログ出力
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target
1
2
3
# ユニットファイル変更後はリロードが必要
sudo systemctl daemon-reload
sudo systemctl restart myapp.service

3. 依存関係の確認と設定

1
2
3
4
5
6
7
8
9
# 依存関係の確認
systemctl list-dependencies myapp.service

# 依存サービスの状態確認
systemctl status postgresql.service
systemctl status network.target

# 起動順序の問題を調査
systemd-analyze critical-chain myapp.service

4. 権限の問題を修正

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 実行ファイルの権限確認
ls -la /usr/local/bin/myapp

# 実行ユーザーの確認
id myapp

# 必要なディレクトリの権限設定
sudo chown -R myapp:myapp /opt/myapp
sudo chown -R myapp:myapp /var/log/myapp

# 特権ポート(1024未満)を使う場合
sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/myapp

5. ポート競合の解消

1
2
3
4
5
6
7
8
9
# 使用中のポートを確認
sudo ss -tlnp | grep :8080

# 競合プロセスを特定
sudo lsof -i :8080

# プロセスを停止してから再起動
sudo kill <PID>
sudo systemctl start myapp.service

関連エラー

Linux の他のエラー

最終更新: 2026-02-03