1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

systemdチートシート:サービスが起動しないときに見るsystemctlとjournalctl

1
Last updated at Posted at 2026-07-07

Linuxサーバーでサービスが起動しないとき、まず見るのは systemctljournalctl です。

Red Hat公式のsystemdチートシートにも主要コマンドはまとまっていますが、実際に使うときは「どの順番で見るか」「何を見ればよいか」が分かると便利です。

この記事では、サービスの状態確認、ログ確認、自動起動、Unitファイル編集後の反映まで、使用者目線でsystemdまわりのコマンドを整理します。

サービスが起動しないときは、まず次の順番で見ると原因を絞りやすいです。

順番 コマンド 何を見るか
1 systemctl status your.service 失敗状態、終了コード、直近ログ
2 journalctl -xeu your.service systemdが補足したエラー文脈
3 journalctl -u your.service -b -e 現在の起動以降の末尾ログ
4 systemctl cat your.service 実際に読み込まれているUnit定義
5 systemctl list-dependencies your.service 依存Unitの状態

この記事は、systemdを採用しているLinuxディストリビューションを前提にしています。

ディストリビューションやバージョンによって、Unitファイルの配置場所や一部の挙動が異なる場合があります。

まず覚えるコマンド

サービスを見るときに、まず使うのはこのあたりです。

やりたいこと コマンド
サービス状態を見る systemctl status nginx.service
サービスを起動する sudo systemctl start nginx.service
サービスを停止する sudo systemctl stop nginx.service
サービスを再起動する sudo systemctl restart nginx.service
設定だけ再読み込みする sudo systemctl reload nginx.service
自動起動を有効化する sudo systemctl enable nginx.service
自動起動を無効化する sudo systemctl disable nginx.service
自動起動状態を見る systemctl is-enabled nginx.service
起動中かだけ見る systemctl is-active nginx.service
ログを見る journalctl -u nginx.service
ログを追いかける journalctl -u nginx.service -f
失敗状態を解除する sudo systemctl reset-failed nginx.service

.service は省略できることも多いです。

systemctl status nginx

ただ、チートシートや手順書では .service まで書いておく方が、Unitを扱っていることが明確になります。

最短の確認順

サービスが起動しないときは、まずこの順番で確認します。

systemctl status your.service
journalctl -xeu your.service
journalctl -u your.service -b -e
systemctl cat your.service

それぞれの役割です。

コマンド 見ること
systemctl status 失敗状態、終了コード、直近ログ
journalctl -xeu systemdが補足したエラー文脈
journalctl -u ... -b -e 現在の起動以降の末尾ログ
systemctl cat 実際に読み込まれているUnit定義

まず status で状態を見て、原因が分からなければ journalctl でログを深掘りします。

Unitファイルを編集した覚えがある場合は、 systemctl cat で実際に読み込まれている定義を確認します。

statusで見ること

まずは status を見ます。

systemctl status nginx.service

見るポイントは次の通りです。

見るところ 意味
Loaded Unitファイルが読み込まれているか、自動起動設定はどうか
Active 起動中か、失敗しているか
Main PID メインプロセスのPID
Docs 関連ドキュメントが設定されている場合の参照先
下部のログ 直近のログ

よく見る状態です。

状態 意味
active (running) 起動中
inactive (dead) 停止中
failed 起動失敗などで失敗状態
activating 起動処理中
deactivating 停止処理中

status の下部に出るログは直近分だけです。

原因調査では、 journalctl -u <unit> でログを追う方が確実です。

ログを見る

対象サービスのログを見るには、 journalctl -u を使います。

journalctl -u nginx.service

末尾から見るなら -e を付けます。

journalctl -u nginx.service -e

リアルタイムに追うなら -f です。

journalctl -u nginx.service -f

現在の起動以降のログだけを見るなら -b を使います。

journalctl -u nginx.service -b

時刻で絞ることもできます。

journalctl -u nginx.service --since "2026-07-06 10:00" --until "2026-07-06 11:00"

ログをページャなしで出したい場合は --no-pager を付けます。

journalctl -u nginx.service -b --no-pager

サービスが起動しないときの確認順

サービスが起動しないときは、闇雲に設定ファイルを触るより、次の順番で見ます。

systemctl status your.service
journalctl -xeu your.service
journalctl -u your.service -b -e
systemctl cat your.service
systemctl show your.service

見る観点です。

順番 コマンド 確認すること
1 systemctl status 失敗状態、終了コード、直近ログ
2 journalctl -xeu systemdが補足するエラー文脈
3 journalctl -u エラー全文、起動時刻、繰り返し失敗
4 systemctl cat 実際に読み込まれているUnit定義
5 systemctl show 展開後のプロパティ
6 アプリ側の設定確認 Nginx設定、DB接続、環境変数など

systemctl cat は、Unitファイル本体とdrop-in設定をまとめて確認できるので便利です。

systemctl cat nginx.service

失敗状態を解除したい場合は、 reset-failed を使います。

sudo systemctl reset-failed your.service

reset-failed は失敗状態の記録を消すだけで、根本原因を直すコマンドではありません。

ログを確認し、原因を修正してから使います。

Unit一覧を見る

現在systemdが把握しているUnitを一覧します。

systemctl list-units

失敗しているUnitだけを見るなら次の通りです。

systemctl --failed

Unitファイルの一覧と自動起動状態を見るなら、 list-unit-files を使います。

systemctl list-unit-files

サービスだけに絞るなら、 --type=service を付けます。

systemctl list-units --type=service
systemctl list-unit-files --type=service

list-units は現在ロードされているUnitを見るコマンド、 list-unit-files はUnitファイルと有効化状態を見るコマンド、と覚えると使い分けやすいです。

自動起動を設定する

サービスを今すぐ起動するだけなら start です。

sudo systemctl start nginx.service

OS起動時にも自動起動させるなら enable です。

sudo systemctl enable nginx.service

両方まとめて行うなら --now が使えます。

sudo systemctl enable --now nginx.service

逆に、自動起動を止めて、今動いているサービスも止めるなら次のようにします。

sudo systemctl disable --now nginx.service

Unitファイルを編集した後

Unitファイルを変更した後は、systemdに再読み込みさせます。

sudo systemctl daemon-reload

その後、対象サービスを再起動します。

sudo systemctl restart your.service

Unitファイルの構文を確認するには、 systemd-analyze verify が使えます。

systemd-analyze verify your.service

Unitファイルを編集しただけでは、systemdが変更を認識しないことがあります。

Unit定義を変えたら、 systemctl daemon-reload を実行します。

Unitファイルの配置場所

よく見る配置場所です。

パス 用途
/usr/lib/systemd/system/ パッケージが提供するUnitファイル
/lib/systemd/system/ ディストリビューションによって使われるUnitファイル
/etc/systemd/system/ 管理者が追加・上書きするUnitファイル
/etc/systemd/system/<unit>.d/ drop-in設定

自分でサービスを追加するなら、基本的には /etc/systemd/system/ 配下に置きます。

パッケージが提供するUnitを直接編集するより、drop-inで上書きする方が管理しやすいです。

sudo systemctl edit nginx.service

サービスUnitの最小例

自作スクリプトをsystemdで起動する最小例です。

[Unit]
Description=My Worker
After=network.target

[Service]
Type=simple
WorkingDirectory=/opt/my-worker
ExecStart=/usr/bin/python3 /opt/my-worker/main.py
Restart=on-failure
User=myuser
Group=myuser

[Install]
WantedBy=multi-user.target

配置例です。

sudo cp my-worker.service /etc/systemd/system/my-worker.service
sudo systemctl daemon-reload
sudo systemctl enable --now my-worker.service

ログを確認します。

systemctl status my-worker.service
journalctl -u my-worker.service -f

タイマーを確認する

cronのような定期実行は、systemd timerで管理されていることがあります。

systemctl list-timers

全て表示するなら --all を付けます。

systemctl list-timers --all

特定のtimerを見るなら、通常のUnitと同じように status を使えます。

systemctl status apt-daily.timer

システム状態を変える

サーバー操作で使うことがあるコマンドです。

やりたいこと コマンド
再起動 sudo systemctl reboot
電源オフ sudo systemctl poweroff
デフォルトターゲットへ戻る sudo systemctl default
emergency modeへ入る sudo systemctl emergency
現在のデフォルトターゲットを見る systemctl get-default
デフォルトターゲットを変更する sudo systemctl set-default multi-user.target

rebootpoweroffemergency はシステム全体に影響します。

リモートサーバーで実行する場合は、接続復旧手段があることを確認してから実行します。

よく使う調査コマンドまとめ

最後に、実際によく使うコマンドをまとめます。

# 状態確認
systemctl status your.service
systemctl is-active your.service
systemctl is-enabled your.service

# 起動・停止
sudo systemctl start your.service
sudo systemctl stop your.service
sudo systemctl restart your.service
sudo systemctl reload your.service

# 自動起動
sudo systemctl enable --now your.service
sudo systemctl disable --now your.service

# ログ
journalctl -u your.service -b -e
journalctl -u your.service -f
journalctl -u your.service --since "1 hour ago"

# Unit確認
systemctl cat your.service
systemctl show your.service
systemctl list-units --type=service
systemctl list-unit-files --type=service
systemctl --failed

# Unit変更後
sudo systemctl daemon-reload
systemd-analyze verify your.service

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?