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-reload | 要 | Unitファイル変更後に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) |
| Loaded | loaded (/lib/...; enabled) | Unit定義ファイルがロードされたパスと自動起動設定。enabled(自動起動ON)、disabled(自動起動OFF)、masked(起動禁止) |
| Active | active (running) | 正常に常駐起動中。プロセスの起動時刻や経過時間も表示される |
inactive (dead) | 正常停止中。プロセスは終了している状態 | |
active (exited) | ワンショット実行型サービス(起動スクリプト実行後に正常終了し、常駐しないUnit) | |
failed (Result: exit-code) | 異常終了・起動失敗。直ちにエラーログの確認が必要 | |
| Main PID | 1234 (nginx) | マスタープロセスのプロセスID(PID)。プロセス監視やシグナル送信時に使用 |
| Tasks / Memory | Tasks: 3, Memory: 8.5M | 消費中のタスク数(スレッド数)とメモリ使用量 |
| CGroup | /system.slice/nginx.service | systemdのコントロールグループ。マスターからフォークされた子プロセス一覧を表示 |
| ジャーナル抜粋 | 最下部のログ行 | サービス起動時や直近のエラーログ抜粋(末尾数行)が表示される |
サービスの基本操作(起動・停止・再起動・リロード)
サービスの日常的な制御は、以下のコマンドで行います。いずれもシステム全体に影響を与えるため sudo が必要です。
# サービスを起動する
sudo systemctl start nginx
# サービスを停止する
sudo systemctl stop nginx
# サービスを再起動する(プロセス停止 → 起動)
sudo systemctl restart nginx
# サービスの設定ファイルのみを無停止で再読み込みする
sudo systemctl reload nginx
restart と reload の違いと使い分け
実務で特に注意すべきなのが restart と reload の違いです。
- restart(再起動): 一旦プロセスを完全に停止(kill)してから再起動します。既存のTCP接続やセッションが切断され、ミリ秒〜数秒のダウンタイムが発生します。パッケージ更新後やミドルウェアのバイナリ変更、大規模な設定変更で必須です。
- reload(リロード): プロセスを停止させず、稼働中のプロセスにシグナル(SIGHUP等)を送信して設定ファイル(
nginx.confやhttpd.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/FAILURE や status=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)」があります。ポートの使用状況は ss や lsof コマンドで調査します。
ポート重複や原因特定の詳しい切り分け手順は、Linuxのポート確認方法とポート競合の解消手順および500エラーの原因切り分け手順を参照してください。
また、自作のNode.jsやPythonアプリをsystemdサービスとして自動起動・異常時自動再起動させたい場合は、systemdユニットの基本と再起動戦略|最小雛形と安全なRestart=設計を参考にUnitファイルを作成してください。
旧SysVinit(service / chkconfig)コマンドとの違いと対応表
CentOS 6以前などの古い環境で使われていた service コマンドや chkconfig コマンドは、systemd 環境ではすべて systemctl に統合されています。
| 操作内容 | 旧SysVinit(従来のコマンド) | systemd(systemctlコマンド) |
|---|---|---|
| サービスの起動 | service httpd start | sudo systemctl start httpd |
| サービスの停止 | service httpd stop | sudo systemctl stop httpd |
| サービスの再起動 | service httpd restart | sudo systemctl restart httpd |
| 設定の再読み込み | service httpd reload | sudo systemctl reload httpd |
| 稼働状態の確認 | service httpd status | systemctl status httpd |
| 自動起動の有効化 | chkconfig httpd on | sudo systemctl enable httpd |
| 自動起動の無効化 | chkconfig httpd off | sudo systemctl disable httpd |
| 自動起動一覧の確認 | chkconfig --list | systemctl 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を実行する。

コメント