LinuxLinux [リナックス / ライナックス]オープンソースのOSカーネルサーバーを運用・構築する上で、Webサーバーやデータベースなどのサービス(デーモン)の起動・停止や自動起動設定は必須の日常操作です。
CentOSCentOS [セントオーエス]Red Hat Enterprise Linux互換の安定したLinuxディストリビューション Stream、RHEL系ディストリビューション、UbuntuUbuntu [ウブントゥ]人気のLinuxディストリビューションなど、主要なLinuxディストリビューションでは、initinit [イニット]initialization(初期化)の略。システムやオブジェクトを初期状態にすることシステムとして systemd が標準採用されており、その操作の中核を担うのが systemctl コマンドです。
本記事では、現場で頻繁に使う基本的なコマンドから、ステータスの読み解き方、ログ調査、起動失敗時のトラブルシューティング手順まで、要点を絞ってシンプルに解説します。
想定環境
- OSOS [オーエス]Operating System。基本ソフトウェア: CentOS Stream / AlmaLinux / Rocky Linux / Ubuntu Server
- ユニット名の指定時、
.service拡張子は省略可能です(例:nginx.service→nginx)
systemctlの基礎知識と基本操作
systemctlとは?systemdとの関係
systemctl は、Linuxのシステムとサービスを管理するバックグラウンドプログラム systemd を操作するための管理コマンド です。
- systemd: システム起動時のプロセス初期化や並列起動、各種サービス・ソケット・マウントポイントなどのリソース(ユニット)を一元管理する仕組み。
- systemctl: 管理者が systemd に対して「サービスを起動せよ」「状態を教えろ」と命令を下すためのインターフェース。
従来のservice/chkconfigコマンドとの対比
古いLinux(CentOS 6以前など)では、サービス操作に service、自動起動設定に chkconfig がよく使われていました。
systemdを採用したLinuxでは、サービスの起動・停止や自動起動設定などを systemctl で管理するのが基本です。
| 操作 | 従来のコマンド (SysVinit) | 現代のコマンド (systemd) |
|---|---|---|
| サービスの起動 | service nginx start | sudo systemctl start nginx |
| サービスの停止 | service nginx stop | sudo systemctl stop nginx |
| サービスの再起動 | service nginx restart | sudo systemctl restart nginx |
| 稼働状態の確認 | service nginx status | systemctl status nginx |
| 自動起動の有効化 | chkconfig nginx on | sudo systemctl enable nginx |
| 自動起動の無効化 | chkconfig nginx off | sudo systemctl disable nginx |
サービスの基本操作(起動・停止・再起動・リロード)
日常的に最もよく使うサービス制御コマンドです。システムサービスの制御には通常、管理者権限(sudo)が必要です。
# サービスを起動するsudo systemctl start nginx
# サービスを停止するsudo systemctl stop nginx
# サービスを再起動する(プロセスを一度停止してから起動)sudo systemctl restart nginx
# 設定ファイルを再読み込みする(プロセスを停止させずに反映)sudo systemctl reload nginxrestart と reload の使い分け
reload: Webサーバーの設定変更など。サービスが対応している場合、プロセスを停止せずにサービス側の設定を再読み込みできます。restart: サービスを停止してから再度起動します。reloadに非対応のサービスや、根本的な設定変更を行った場合はこちらを使います。
サービスの自動起動設定(有効化・無効化)
OS起動時にサービスを自動的に立ち上げるかどうかを制御します。
# 自動起動を有効にするsudo systemctl enable nginx
# 自動起動を無効にするsudo systemctl disable nginx
# 自動起動が有効になっているか確認するsystemctl is-enabled nginxis-enabled の主な戻り値 単純な有効/無効以外にも、以下のようなステータスが返されることがあります。
enabled/disabled: 自動起動の有効 / 無効static: 自動起動の設定を持たないが、他のサービスから依存されて起動しうる状態masked: 完全に無効化されており、手動での起動もできない状態
便利技:起動と自動起動を1行で同時に行う(—now)
通常は start と enable を別々に実行しますが、--now オプションを付けると 「今すぐ起動」と「自動起動の有効化」を1行で同時に実行 できます。
# 起動と自動起動有効化を同時に行うsudo systemctl enable --now nginx
# 停止と自動起動解除を同時に行うsudo systemctl disable --now nginx新規サーバーの構築時などに手数を減らせる定番テクニックです。
サービスの状態確認(status)
サービスが現在正常に稼働しているか、エラーで停止していないかを確認します。トラブル調査の起点となる最重要コマンドです。
Tips: status確認時は
sudo推奨systemctl statusは一般ユーザーでも実行できますが、サービスの詳細な状態やログを確認する際は、権限の影響を避けるためsudo systemctl status <サービス>を使用するのが確実です。
systemctl status nginx● nginx.service - The nginx HTTP and reverse proxy server Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: disabled) Active: active (running) since Sat 2026-09-12 10:00:00 JST; 1h ago Main PID: 12345 (nginx) Tasks: 3 (limit: 4684) Memory: 6.2M CPU: 85ms CGroup: /system.slice/nginx.service ├─12345 "nginx: master process /usr/sbin/nginx" ├─12346 "nginx: worker process" └─12347 "nginx: worker process"
Sep 12 10:00:00 server01 systemd[1]: Starting The nginx HTTP and reverse proxy server...Sep 12 10:00:00 server01 systemd[1]: Started The nginx HTTP and reverse proxy server.ステータス画面で見るべき4つのポイント
- Loaded:
- ユニットファイルが読み込まれているパスと、自動起動設定(
enabledまたはdisabled)が示されます。 - ※末尾の
presetは、systemdのプリセットポリシーに基づく設定値を示します。systemdのバージョンやディストリビューションによって表示形式が異なる場合があります。
- ユニットファイルが読み込まれているパスと、自動起動設定(
- Active:
active (running): 正常に稼働中inactive (dead): 停止中failed: 起動失敗または異常終了(原因調査が必要)active (exited): 起動処理などのプロセスは終了しているものの、systemd上では正常に処理が完了した状態としてactive扱いになっている状態です。RemainAfterExit=yesを設定したサービスなどで見られます。
- Main PID:
- systemdがそのサービスのメインプロセスとして認識しているプロセスのPIDです。
- 末尾のログ(最新ログメッセージ):
- 直近の起動イベントやエラー出力が表示されます。起動失敗時には、直近のエラーメッセージが表示され、原因を特定する手掛かりになることがあります。
サービス一覧の確認(list-units / list-unit-files)
「現在どんなサービスが動いているか」「システムにどんなサービスが登録されているか」を調べる際は、以下の2つのコマンドを使い分けます。
# 1. 現在ロードされているサービス一覧を表示systemctl list-units --type=service
# 2. 停止中も含め、ロードされている全サービスを表示systemctl list-units --type=service --all
# 3. インストールされているユニットファイルと自動起動状態の一覧を表示systemctl list-unit-files --type=servicelist-units と list-unit-files の違い
list-units: 現在 systemdがロードしているユニットの状態 を確認します。デフォルトでは主にアクティブなユニットが表示され、--allを付けると非アクティブなユニットも含めて確認できます。「現在ロードされているサービス一覧」を見たいときに使います。list-unit-files: ディスク上に配置された ユニットファイルと自動起動設定の一覧 を確認します。「どのサービスがインストールされていて、自動起動がどう設定されているか」を確認したいときに便利です。
特定のサービスを検索したい場合は、grep とパイプで組み合わせます。
systemctl list-unit-files --type=service | grep -E "nginx|httpd|mariadb"systemdの応用設定(ユニット・ターゲット・ログ)
ユニットファイルの設定と変更時のルール
systemdで管理されるサービスの設定は「ユニットファイル(.service)」に記述されています。
ユニットファイルの配置場所
ユニットファイルは主に以下の場所に配置されます。
/usr/lib/systemd/system/: ディストリビューションやパッケージによって提供されるユニットファイル/etc/systemd/system/: システム管理者が作成・変更するユニットファイルやoverride設定
/etc/systemd/system/ は /usr/lib/systemd/system/ より優先されます。
既存サービスの設定を変更したい場合は、/usr/lib/systemd/system/ のファイルを直接編集せず、/etc/systemd/system/ にコピーして編集するか、sudo systemctl edit <サービス名> コマンドを使ってオーバーライドするのが推奨されます。
ユニットファイルを直接変更した場合は daemon-reload を実行
ユニットファイルを新規作成したり、既存のユニットファイルを直接書き換えたりした場合は、daemon-reload を実行してsystemdに変更を再読み込みさせます。
sudo systemctl daemon-reload注意
systemctl daemon-reloadを実行せずにユニットファイルを変更すると、systemdが変更前のユニット設定を保持したまま動作する場合があります。変更したユニットファイルをsystemdに再読み込みさせるため、ユニットファイルを変更した後はdaemon-reloadを実行します。
💡 daemondaemon [デーモン]バックグラウンドで動作するプロセス-reload と reload の違い
sudo systemctl reload <サービス>: サービス自身(NginxNginx [エンジンエックス]高性能なWebサーバー・リバースプロキシなど) が設定ファイルを再読み込みする操作sudo systemctl daemon-reload: systemd がユニットファイルを再読み込みする操作 両者は全く別の操作である点に注意してください。
ターゲット(ランレベル)の管理
systemdでは、従来の「ランレベル(動作モード)」に相当する仕組みを ターゲット(Target) と呼びます。
よく使われるターゲットは以下の2つです。
multi-user.target: CUI(コマンドライン)環境(従来のランレベル3)graphical.target: GUIGUI [ジーユーアイ / グーイ]Graphical User Interface。グラフィカルな操作画面環境(従来のランレベル5)
# 現在のデフォルト起動ターゲットを確認systemctl get-default
# 次回起動時のターゲットをCUI環境に変更sudo systemctl set-default multi-user.target
# 次回起動時のターゲットをGUI環境に変更sudo systemctl set-default graphical.target
# システムを再起動せずに一時的にターゲットを切り替えるsudo systemctl isolate multi-user.target※
isolateは現在実行中のサービスを停止する可能性があるため、実運用環境では影響範囲を確認してから実行してください。
ログの確認(journalctlとの連携)
systemctl status の下部に表示されるログは直近の数行のみです。トラブル調査などで過去のログを詳しく追いたい場合は、systemdのログ管理コマンド journalctl を使います。
# 特定サービスのログを全件表示(less形式)sudo journalctl -u nginx
# ログをリアルタイムで監視(tail -f と同等)sudo journalctl -u nginx -f
# 本日発生したエラー(err)以上の重要ログのみ抽出sudo journalctl -u nginx -p err --since todayjournalctl の詳しいオプションや検索方法については、以下の記事で徹底解説しています。

journalctlとは?使い方とオプションをわかりやすく解説【Linux】
Linuxのjournalctlコマンドの使い方を初心者向けに解説します。systemdのログを確認するjournalctlの基本から、-u・-f・-p・--sinceなど主要オプション、サービスログの絞り込みやリアルタイム監視、ログの管理方法まで具体例付きで紹介します。
トラブルシューティングとまとめ(チートシート)
サービスが起動しないときの調査手順(3ステップ)
サービスを start した際にエラーが出たり、ステータスが failed になったりした場合のトラブルシューティング手順です。
# 例: 起動時にエラーが出た場合$ sudo systemctl start nginxJob for nginx.service failed because the control process exited with error code.See "systemctl status nginx.service" and "journalctl -xeu nginx.service" for details.ステップ1: systemctl status で大枠の失敗原因を確認
まずはステータスを確認し、プロセスの終了コードやメッセージを確認します。
systemctl status nginxcode=exited, status=1/FAILURE のように終了コードが表示され、末尾数行に直接の原因(設定エラーなど)が出力されている場合があります。
ステップ2: journalctl で詳細なエラーメッセージを特定
ログの末尾数行で分からない場合は、-xeu オプション付きでログを確認します。エラーメッセージで提示されるコマンド例に合わせて、.service まで省略せずに指定すると確実です。
sudo journalctl -xeu nginx.service設定ファイルの構文ミス(シンタックスエラー)、必要なディレクトリのパーミッション不足、ポート番号の競合などのエラーの手掛かりが記録されている場合があります。
ステップ3: よくある原因の切り分け
- 設定ファイルの文法エラー:
- Nginxなら
nginx -t、ApacheApache [アパッチ]世界中で広く利用されているオープンソースのWebサーバーソフトウェアならapachectl configtestを実行し、設定ファイルの記載ミスがないか確認します。
- Nginxなら
- ポートの競合:
- 起動しようとしているポート(例: 80番ポート)を別のプロセスがすでに使っていないか確認します。
ポート使用状況の確認 sudo ss -tulnp | grep :80 - ユニットファイルの設定変更忘れ:
- ユニットファイルを書き換えた場合は、
sudo systemctl daemon-reloadを打ってから再度sudo systemctl restart <サービス>を試します。
- ユニットファイルを書き換えた場合は、
まとめ:systemctlコマンド早見表(チートシート)
日常的な運用でよく使う systemctl コマンドの一覧です。手元での作業時にチートシートとしてご活用ください。
| 操作内容 | コマンド | 権限 |
|---|---|---|
| サービスの起動 | sudo systemctl start <サービス> | 要 root |
| サービスの停止 | sudo systemctl stop <サービス> | 要 root |
| サービスの再起動 | sudo systemctl restart <サービス> | 要 root |
| 設定のリロード | sudo systemctl reload <サービス> | 要 root |
| 自動起動の有効化 | sudo systemctl enable <サービス> | 要 root |
| 自動起動の無効化 | sudo systemctl disable <サービス> | 要 root |
| 起動+自動起動を同時実行 | sudo systemctl enable --now <サービス> | 要 root |
| 自動起動状態の確認 | systemctl is-enabled <サービス> | 一般 |
| 稼働状況の確認 | systemctl status <サービス> | 一般(※) |
| 稼働中サービス一覧 | systemctl list-units --type=service | 一般 |
| 自動起動設定一覧 | systemctl list-unit-files --type=service | 一般 |
| systemd設定の再読み込み | sudo systemctl daemon-reload | 要 root |
| サービスのログ監視 | sudo journalctl -u <サービス> -f | 詳細確認では sudosudo [スードゥー / スーデュー]Superuser doの略。一時的に他のユーザー(主に管理者特権)の権限でコマンドを実行する 推奨 |
| デフォルトターゲット確認 | systemctl get-default | 一般 |
以上で本記事の解説を終わります。
よいITライフを!
人気記事
- 1
- 2
- 3
- 4
- 5
Rocky Linux対応。実際にWebサーバーを公開するまでのプロセスを体験できる、最も確実で実践的なガイドブックです。