サービスの状態を把握する|systemctl statusとjournalctl -uで現場の原因を切り分ける

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxtips > サービスの状態を把握する|systemctl statusとjournalctl -uで現場の原因を切り分ける

この記事のポイント

・現代のRHEL7+/Ubuntu系では systemctl status サービス名 が標準
・直前のログを併せて確認するなら journalctl -u サービス名 -n 50 が定番
・SysV init時代の service コマンドや /etc/init.d/サービス名 status も互換維持で動作
・自動起動の有無は systemctl is-enabled サービス名 で確認できる

「サービスが止まっているのか、それともクラッシュしたのか、どう見分ければいいんですか?」
セミナーで頻繁に受ける質問です。

Linuxサーバーで何かトラブルが起きたとき、最初にやることは「対象サービスの状態を把握する」です。状態を正しく読めれば、再起動するべきか、設定ミスを疑うべきか、ログを掘るべきか、判断の方向性が決まります。

この記事では、20年以上Linuxサーバーを運用してきた経験から、サービスの状態を把握するための実務コマンドを、SysV init時代の service コマンドから現代の systemctl まで、世代を横断して解説します。RHEL 9 / Rocky Linux 9 / Ubuntu 22.04・24.04 LTSで動作確認済みです。

「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

サービスの状態を把握する基本:systemctl status の使い方

RHEL 7以降(CentOS 7・Rocky Linux 8/9・AlmaLinux・RHEL 8/9)と、Ubuntu 16.04 LTS以降では、サービス管理は systemd に統一されています。状態確認の基本コマンドは systemctl status です。

■systemctl status でサービスの状態を確認

[pakira@Tiger ~]$ systemctl status sshd * sshd.service - OpenSSH server daemon Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; preset: enabled) Active: active (running) since Sun 2026-05-18 09:12:33 JST; 6h ago Docs: man:sshd(8) man:sshd_config(5) Main PID: 1320 (sshd) Tasks: 1 (limit: 4612) Memory: 5.4M CPU: 105ms CGroup: /system.slice/sshd.service `-1320 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups" 5月 18 09:12:33 Tiger systemd[1]: Started OpenSSH server daemon.

出力の読み方は次のとおりです。

Loaded:サービス定義ファイル(unit file)の読み込み状況と自動起動設定(enabled/disabled)
Active:サービスの稼働状態。active (running) / inactive (dead) / failed の3パターンが基本
Main PID:サービス本体のプロセスID
末尾の数行:直近の journal ログが自動で表示される(トラブル時はここが最重要)

1. 一般ユーザーでも実行できる

systemctl status は読み取り専用なので、一般ユーザーで実行できます。start/stop/restart はrootまたはsudoが必要ですが、状態確認だけなら権限を気にしなくて構いません。

2. 終了コードでスクリプト判定する

シェルスクリプトでサービスの稼働判定をしたい場合は、systemctl is-active を使います。-q オプションで出力を抑制し、終了コード(0=active, 3=inactive)で判定します。

# シェルスクリプトでの判定例 if systemctl is-active -q sshd; then echo "sshd is running" else echo "sshd is NOT running" fi

journalctl でサービスのログを把握する

状態確認だけでは原因が掴めないとき、journalctl でサービス単位のログを掘ります。systemctl status の末尾10行で足りないなら、journalctlに移行するのが現代の流儀です。

■journalctl -u でサービス指定ログを表示

# sshdの直近50行 [root@Tiger ~]# journalctl -u sshd -n 50 # sshdの当日分を末尾追従(tail -fのような動作) [root@Tiger ~]# journalctl -u sshd -f # sshdの本日分のみ [root@Tiger ~]# journalctl -u sshd --since today # 起動失敗したサービスを特定 [root@Tiger ~]# journalctl -u sshd --since "1 hour ago" -p err

journalctl の便利オプションは次のとおりです。

-u サービス名:特定サービスのログのみ抽出
-n 数値:直近の指定行数のみ表示
-f:末尾を追従表示(tail -fと同じ)
--since "1 hour ago":指定時間以降のログを表示
-p err:error以上のログのみ抽出(emerg/alert/crit/err/warning/notice/info/debug)

私のセミナーでは「サービスがおかしいと思ったら、systemctl status の次は journalctl -u サービス名 -n 50 を必ず叩いてください」と繰り返し伝えています。これだけで現場の原因切り分けスピードが目に見えて変わります。

自動起動の有無を確認する:systemctl is-enabled

状態の「いま動いているか」と並んで重要なのが、「再起動後に自動で立ち上がるか」です。これは is-enabled で確認します。

# 自動起動の有無を確認 [root@Tiger ~]# systemctl is-enabled sshd enabled [root@Tiger ~]# systemctl is-enabled firewalld enabled [root@Tiger ~]# systemctl is-enabled tuned disabled

出力は次のいずれかになります。

enabled:OS起動時に自動起動する
disabled:自動起動しない
static:他サービスから呼び出されるため単独では起動しない
masked:起動が禁止されている(systemctl mask 済み)

インストール直後のサービスが「動いているのに再起動すると消える」という事故は、is-enabled = disabled のまま使っていることが原因です。systemctl enable サービス名 で有効化すれば解消します。

従来の service コマンドと /etc/init.d スクリプトとの互換性

RHEL 7以降でsystemdに統一された今でも、過去の運用スクリプトとの互換性のため、service コマンドや /etc/init.d/サービス名 status は動作します。systemdが裏で systemctl にリダイレクトしてくれます。

■サービススクリプトの引数にstatusを指定した場合

$ /etc/init.d/ntpd status ntpd (pid 1320) を実行中... $ /etc/init.d/network status 設定されたデバイス: lo eth0 eth1 現在活動中のデバイス: lo eth0 eth1

■serviceコマンドの引数にstatusを指定した場合

$ /sbin/service ntpd status ntpd (pid 1320) を実行中... $ /sbin/service network status 設定されたデバイス: lo eth0 eth1 現在活動中のデバイス: lo eth0 eth1

サービスのステータス確認は、一般ユーザーでも行えます。

ただし、現代のRHEL7+/Ubuntu系では service コマンドは内部的に systemctl status を呼び出すラッパーになっています。新しいサーバーの運用ドキュメントを書くなら、最初から systemctl を使う方が将来のメンテナンスでブレません。

RHEL 6以前・古いUbuntuで残るSysV init環境

RHEL 6・CentOS 6・Ubuntu 14.04以前のサーバーがまだ稼働している現場もあります。これらはSysV init方式で、service と /etc/init.d/サービス名 が一次のコマンドです。

ただしRHEL 6は2020年11月、CentOS 6は2020年11月、Ubuntu 14.04 LTSは2024年4月(ESM終了)で正式サポートが終了しています。状態確認だけでなく、まずOS自体のリプレース計画を立てるのが本筋です。

稼働中サービスの一覧を把握する

個別サービスではなく、サーバー全体で「いま何が動いているか」を俯瞰したい場合は、list-unitsを使います。

# 稼働中のサービス一覧 [root@Tiger ~]# systemctl list-units --type=service --state=running # 失敗しているサービス一覧 [root@Tiger ~]# systemctl list-units --type=service --state=failed # 自動起動が有効なサービス一覧 [root@Tiger ~]# systemctl list-unit-files --type=service --state=enabled

新規構築直後のサーバーで「不要なサービスが上がっていないか」のチェックや、トラブル時の「failed状態のサービスがないか」の俯瞰確認に重宝します。

本記事のまとめ

サービスの状態を把握するためのコマンドを一覧でまとめます。
やりたいことコマンド
サービスの状態を確認する(現代の標準)systemctl status sshd
シェルで稼働判定するsystemctl is-active -q sshd
自動起動の有無を確認するsystemctl is-enabled sshd
サービスのログを確認するjournalctl -u sshd -n 50
サービスのログを追従表示するjournalctl -u sshd -f
稼働中サービスの一覧を表示するsystemctl list-units --type=service --state=running
失敗しているサービスを抽出するsystemctl list-units --type=service --state=failed
互換コマンドで状態を確認するservice sshd status または /etc/init.d/sshd status
状態把握は「systemctl status → journalctl -u サービス名 -n 50 → 必要なら設定確認」の3段階で動くと、現場で迷いません。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。