【完全早見表】systemctlコマンドの使い方(start/stop/status/enable)とエラー対処

コマンドリファレンス

systemctl(システム・コントロール)は、Linuxにおいて各種サービス(Nginx、MySQL、SSH、Dockerなど)の起動・停止・再起動・状態確認や、OS起動時の自動起動(enable / disable)を一括管理する最も基本的な重要コマンドです。

近年の主要Linuxディストリビューション(Ubuntu、Debian、RHEL、AlmaLinux、Rocky Linux、Amazon Linux 2023など)では、initシステムとしてsystemdが標準採用されており、サービス制御はすべて systemctl コマンドで行います。「今すぐ使えるコマンドを知りたい」「サービスが起動失敗(failed)して困っている」というエンジニア向けに、実務で即座に役立つ操作早見表、status出力の完全解説、障害時のエラー対処手順を網羅して解説します。

【完全早見表】systemctl コマンド操作一覧

日常の運用保守やトラブルシューティングで頻出する systemctl のサブコマンド一覧です。操作に応じて管理者権限(sudo)が必要です。

やりたいことコマンド(コピペOK)sudo主な用途・備考
状態を確認するsystemctl status サービス名不要稼働状態・PID・直近のエラーログを確認
サービスを起動するsudo systemctl start サービス名停止中のサービスを手動で起動
サービスを停止するsudo systemctl stop サービス名稼働中のサービスを停止
サービスを再起動するsudo systemctl restart サービス名プロセスを一度完全停止してから再起動
設定ファイルのみ再読込sudo systemctl reload サービス名無停止で設定反映(NginxなどのWebサーバー向け)
再読込(不可なら再起動)sudo systemctl reload-or-restart サービス名reload対応時はreload、非対応時はrestart
自動起動を有効化sudo systemctl enable サービス名OS起動時に自動で立ち上がるよう設定
自動起動有効化+即時起動sudo systemctl enable --now サービス名自動起動の有効化と今すぐ起動を同時に実行
自動起動を無効化sudo systemctl disable サービス名OS起動時の自動起動を解除
自動起動の状態確認systemctl is-enabled サービス名不要enabled / disabled を出力(スクリプト用)
稼働中か判定するsystemctl is-active サービス名不要active / inactive / failed を出力
失敗状態か判定するsystemctl is-failed サービス名不要failed / active を出力(監視用)
起動中サービス一覧表示systemctl list-units --type=service --state=running不要現在アクティブに動作している全サービスを表示
失敗したサービス一覧systemctl --failed不要起動失敗・異常終了しているUnitを抽出
全定義と自動起動一覧systemctl list-unit-files --type=service不要システム上の全サービスとenabled/disabled一覧
設定変更をsystemdに反映sudo systemctl daemon-reloadUnitファイル変更後にsystemd定義を再読み込み
サービスの完全無効化sudo systemctl mask サービス名手動起動も含めて誤起動を完全にブロック
マスクの解除sudo systemctl unmask サービス名マスクを解除して通常状態に戻す

systemctl status の見方(出力結果の完全解説)

サービスの稼働状態や障害原因を調査する際、最初に行うのが systemctl status サービス名 です。出力される各行の意味を理解しておくと、トラブル発生時の切り分けスピードが格段に向上します。

$ systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2026-08-24 10:00:00 JST; 24h ago
       Docs: man:nginx(8)
   Main PID: 1234 (nginx)
      Tasks: 3 (limit: 4915)
     Memory: 8.5M
        CPU: 125ms
     CGroup: /system.slice/nginx.service
             ├─1234 nginx: master process /usr/sbin/nginx
             ├─1235 nginx: worker process
             └─1236 nginx: worker process

Aug 24 10:00:00 server systemd[1]: Starting A high performance web server...
Aug 24 10:00:00 server systemd[1]: Started A high performance web server.

出力に含まれる主要項目の意味は以下の通りです。

項目出力の例解説とチェックポイント
シンボル(●)緑 / 赤 / 白緑: 正常稼働、赤: エラー・起動失敗(failed)、白/灰: 停止中(inactive)
Loadedloaded (/lib/...; enabled)Unit定義ファイルがロードされたパスと自動起動設定。enabled(自動起動ON)、disabled(自動起動OFF)、masked(起動禁止)
Activeactive (running)正常に常駐起動中。プロセスの起動時刻や経過時間も表示される
inactive (dead)正常停止中。プロセスは終了している状態
active (exited)ワンショット実行型サービス(起動スクリプト実行後に正常終了し、常駐しないUnit)
failed (Result: exit-code)異常終了・起動失敗。直ちにエラーログの確認が必要
Main PID1234 (nginx)マスタープロセスのプロセスID(PID)。プロセス監視やシグナル送信時に使用
Tasks / MemoryTasks: 3, Memory: 8.5M消費中のタスク数(スレッド数)とメモリ使用量
CGroup/system.slice/nginx.servicesystemdのコントロールグループ。マスターからフォークされた子プロセス一覧を表示
ジャーナル抜粋最下部のログ行サービス起動時や直近のエラーログ抜粋(末尾数行)が表示される

サービスの基本操作(起動・停止・再起動・リロード)

サービスの日常的な制御は、以下のコマンドで行います。いずれもシステム全体に影響を与えるため sudo が必要です。

# サービスを起動する
sudo systemctl start nginx

# サービスを停止する
sudo systemctl stop nginx

# サービスを再起動する(プロセス停止 → 起動)
sudo systemctl restart nginx

# サービスの設定ファイルのみを無停止で再読み込みする
sudo systemctl reload nginx

restart と reload の違いと使い分け

実務で特に注意すべきなのが restartreload の違いです。

  • restart(再起動): 一旦プロセスを完全に停止(kill)してから再起動します。既存のTCP接続やセッションが切断され、ミリ秒〜数秒のダウンタイムが発生します。パッケージ更新後やミドルウェアのバイナリ変更、大規模な設定変更で必須です。
  • reload(リロード): プロセスを停止させず、稼働中のプロセスにシグナル(SIGHUP等)を送信して設定ファイル(nginx.confhttpd.conf など)だけを再読み込みします。アクセス中のユーザー通信を切断しない無停止運用が可能です。
# Nginx設定テスト後に安全にリロードする実務フロー
sudo nginx -t && sudo systemctl reload nginx

# サービスがreloadに対応しているか不明な場合は安全策として以下を使用
sudo systemctl reload-or-restart nginx

自動起動の設定(enable / disable / mask)

サーバーの再起動(OSリブート)時にサービスが自動で立ち上がるようにするには、enable コマンドを使用します。

1. enable と start の違い

初心者が混同しやすいポイントとして、enable は「次回以降のOS起動時に自動起動する設定」を行うだけであり、今その場でプロセスを起動するわけではありません

# 自動起動を有効化する(次回OS起動時から有効。今すぐは起動しない)
sudo systemctl enable nginx

# 自動起動を有効化し、さらに【今すぐ起動】も同時に行う(実務おすすめ)
sudo systemctl enable --now nginx

# 自動起動を無効化する
sudo systemctl disable nginx

# 自動起動を無効化し、さらに【今すぐ停止】も行う
sudo systemctl disable --now nginx

2. 自動起動状態の確認(is-enabled)

シェルスクリプトやAnsibleなどの自動化処理で自動起動が有効か判定したい場合は、is-enabled サブコマンドが便利です。

$ systemctl is-enabled nginx
enabled

3. mask による誤起動の完全ブロック

disable に設定していても、手動で systemctl start を実行したり、他のサービスから依存関係で呼び出されたりすると起動してしまいます。絶対に起動させたくないサービス(競合するiptablesとfirewalldの片方など)は mask します。

# サービスをマスク(/dev/nullへのリンクを作成し、起動を完全遮断)
sudo systemctl mask iptables

# マスク状態を解除する
sudo systemctl unmask iptables

サービス一覧の確認と絞り込み(list-units / list-unit-files)

サーバー上で何が動いているか、どのようなUnitが登録されているかを確認するコマンドです。

1. 現在アクティブに稼働中のサービス一覧

# 動作中(running)のサービスのみを一覧表示
systemctl list-units --type=service --state=running

# サービス以外の全Unit(タイマー、マウント、ソケット等)を含めて確認
systemctl list-units

2. OS上の全サービス定義ファイルと自動起動設定の一覧

# 全サービスのUnitファイルと自動起動状態(enabled/disabled/static/masked)を表示
systemctl list-unit-files --type=service

# 特定のサービス名で絞り込みたい場合(例: php関連)
systemctl list-unit-files --type=service | grep php

3. 起動に失敗しているサービスの一括抽出

障害発生時やサーバー起動直後の健全性チェックでは、以下のワンライナーで失敗Unitの有無を瞬時に確認できます。

systemctl --failed

トラブルシューティング手順(起動失敗・Active: failed の原因究明)

systemctl start を実行した際に「Job for xxx.service failed because the control process exited with error code.」と表示されてサービスが立ち上がらない場合の、実務における最短トラブルシューティングフローです。

ステップ1: systemctl status で終了コードと概況を確認

まずは systemctl status サービス名 を実行し、Active: failed の行と終了コード(Exit Code)を確認します。

$ sudo systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Tue 2026-08-25 09:15:00 JST; 10s ago
    Process: 5432 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=1/FAILURE)

status=1/FAILUREstatus=203/EXEC(実行ファイルが存在しないか実行権限がない)などのヒントが得られます。

ステップ2: journalctl -xeu で詳細エラーログを特定

systemctl status の末尾ログだけではエラーメッセージが途切れていることが多いため、journalctl を使って詳細ログを調査します。

# 対象サービスの直近詳細エラーログを表示(実務の定番コマンド)
sudo journalctl -xeu nginx.service

# サービス起動を試みながらリアルタイムでログを追跡監視する
sudo journalctl -u nginx.service -f

オプション -xeu の意味は以下の通りです:

  • -x(–catalog):エラーメッセージに関連する補足説明やドキュメントリンクを表示
  • -e(–pager-end):ログの最下部(最新のログ)へ即座にスクロールして表示
  • -u(–unit):指定したUnit(サービス)に関連するログのみを抽出

詳しいログの抽出方法や期間指定のテクニックは、journalctlオプション一覧22個|ログ確認のコマンド例で解説しています。

ステップ3: Unit設定変更後の「daemon-reload」の実行

/etc/systemd/system/*.service などのUnit定義ファイルや環境変数ファイルを編集した場合、systemd はメモリ上に前回の設定をキャッシュしているため、即座には反映されません

再読み込みを行わずに restart しようとすると、以下の警告が表示されます。

Warning: The unit file, source configuration file or drop-ins of my-app.service changed on disk. Run 'systemctl daemon-reload' to reload units.

Unitファイルを編集した際は、必ず以下の3ステップで反映させます。

# 1. systemd に設定ファイルの変更を再認識させる
sudo systemctl daemon-reload

# 2. サービスを再起動して新しい設定で立ち上げる
sudo systemctl restart my-app

# 3. 正常にactiveになったか確認
systemctl status my-app

ステップ4: ポート競合や依存関係の調査

WebサーバーやDBサーバーが起動失敗する原因の多くに「他のプロセスが同じポートを既に使用している(Address already in use)」があります。ポートの使用状況は sslsof コマンドで調査します。

ポート重複や原因特定の詳しい切り分け手順は、Linuxのポート確認方法とポート競合の解消手順および500エラーの原因切り分け手順を参照してください。

また、自作のNode.jsやPythonアプリをsystemdサービスとして自動起動・異常時自動再起動させたい場合は、systemdユニットの基本と再起動戦略|最小雛形と安全なRestart=設計を参考にUnitファイルを作成してください。

旧SysVinit(service / chkconfig)コマンドとの違いと対応表

CentOS 6以前などの古い環境で使われていた service コマンドや chkconfig コマンドは、systemd 環境ではすべて systemctl に統合されています。

操作内容旧SysVinit(従来のコマンド)systemd(systemctlコマンド)
サービスの起動service httpd startsudo systemctl start httpd
サービスの停止service httpd stopsudo systemctl stop httpd
サービスの再起動service httpd restartsudo systemctl restart httpd
設定の再読み込みservice httpd reloadsudo systemctl reload httpd
稼働状態の確認service httpd statussystemctl status httpd
自動起動の有効化chkconfig httpd onsudo systemctl enable httpd
自動起動の無効化chkconfig httpd offsudo systemctl disable httpd
自動起動一覧の確認chkconfig --listsystemctl list-unit-files --type=service

互換性のために service nginx restart と打っても内部で systemctl restart nginx にリダイレクトされるディストリビューションが多いですが、詳細なステータス表示やログ連携、スクリプトでの判定を行う際は systemctl を直接使用するのがベストプラクティスです。

まとめ

  • 基本操作: start / stop / restart / status を使い分ける。設定変更のみの場合はダウンタイムなしの reload を優先する。
  • 自動起動: sudo systemctl enable --now サービス名 を使えば、自動起動有効化と即時起動を1コマンドで完了できる。
  • 障害調査フロー: まず systemctl status で概要を掴み、sudo journalctl -xeu サービス名 で詳細ログを特定する。
  • 設定反映: Unit定義ファイルを書き換えた後は、必ず sudo systemctl daemon-reload を実行する。

関連記事

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント