この記事のポイント
・現代の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で動作確認済みです。
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
サービスの状態を把握する基本: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
・-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
$ /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
本記事のまとめ
サービスの状態を把握するためのコマンドを一覧でまとめます。| やりたいこと | コマンド |
|---|---|
| サービスの状態を確認する(現代の標準) | 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 |
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:rsyslogを起動、停止するには
- 前のページへ:Linuxでパケットをキャプチャ(ダンプ)する
- この記事の属するカテゴリ:Linuxtipsへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます