「startとenableの違いって何?」
サーバー管理の現場でsystemctlの操作に戸惑う方は多くいます。RHEL系だけでなくUbuntuでも同じコマンドが使えるにもかかわらず、意外と体系的に整理できていないケースが少なくありません。
この記事では、systemctlコマンドの基本から実務で必要な操作まで、RHEL 9.4 / Ubuntu 24.04 LTSで動作確認済みの実行例を使って解説します。start・stop・enable・disableの違いから、ユニットファイルの確認・作成まで一通りカバーしています。
この記事のポイント
・systemctl start/stop は「今すぐ」、enable/disable は「次回起動時から」の設定
・systemctl status でサービス状態・直近ログを一度に確認できる
・--now オプションで enable+start を1コマンドで同時実行できる
・Failed 状態は journalctl -u でユニット単位のログを確認するのが最短ルート
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
systemctl とは何か
systemctl は、systemd を採用した Linux ディストリビューション全般でサービス(ユニット)を管理するコマンドです。2015年ごろ以降の主要ディストリビューション(RHEL 7以降・Ubuntu 15.04以降・Debian 8以降)はほぼすべて systemd を採用しており、事実上「現代 Linux のサービス管理コマンド」と言い切れます。旧来の SysVinit 環境では service コマンドや chkconfig コマンドを使っていましたが、systemd 環境では systemctl に一本化されています。chkconfig から systemctl への移行についてはこちらも参照してください。
systemd が管理する単位を「ユニット(Unit)」と呼びます。ユニットの種類は多岐にわたりますが、日常的に操作するのは主に以下の2つです。
・サービスユニット(.service):デーモンプロセスの起動・停止を管理する
・ソケットユニット(.socket):ポートを監視してサービスをオンデマンド起動する
本記事では .service ユニットを中心に解説します。
サービスの状態を確認する(status)
まず最も使用頻度が高い status サブコマンドを確認します。サービスの起動状態・プロセスID・直近のログ出力を一度に確認できます。1. サービスの詳細状態を表示する
# sshd サービスの状態を確認する $ sudo systemctl status sshd * sshd.service - OpenSSH server daemon Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; preset: enabled) Active: active (running) since Fri 2026-05-02 09:15:42 JST; 3h 22min ago Docs: man:sshd(8) man:sshd_config(5) Main PID: 1187 (sshd) Tasks: 1 (limit: 23161) Memory: 5.8M CPU: 124ms CGroup: /system.slice/sshd.service └─1187 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups" May 02 09:15:42 web01.example.com sshd[1187]: Server listening on 0.0.0.0 port 22. May 02 09:15:42 web01.example.com sshd[1187]: Server listening on :: port 22.
・Loaded: ユニットファイルの読み込み状態。enabled(次回起動時に自動起動する設定)か disabled かを示す
・Active: 現在の起動状態。active (running) が正常稼働中
・Main PID: メインプロセスのPID
・下部のログ行:journald が収集した直近のログを表示
2. 全サービスの一覧を表示する
# 全ユニットを一覧表示(サービスのみ) $ systemctl list-units --type=service UNIT LOAD ACTIVE SUB DESCRIPTION auditd.service loaded active running Security Auditing Service crond.service loaded active running Command Scheduler firewalld.service loaded active running firewalld - dynamic firewall daemon NetworkManager.service loaded active running Network Manager postfix.service loaded active running Postfix Mail Transport Agent sshd.service loaded active running OpenSSH server daemon ... LOAD = Reflects whether the unit definition was properly loaded. ACTIVE = The high-level unit activation state. SUB = The low-level unit activation state. 52 loaded units listed. # 停止中のサービスも含めて表示する $ systemctl list-units --type=service --all
サービスを起動・停止・再起動する(start / stop / restart)
1. サービスを今すぐ起動する
# httpd サービスを起動する $ sudo systemctl start httpd # 起動後に状態を確認する $ sudo systemctl status httpd * httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; preset: disabled) Active: active (running) since Fri 2026-05-02 10:02:11 JST; 5s ago
2. サービスを今すぐ停止する
# httpd サービスを停止する $ sudo systemctl stop httpd
3. サービスを再起動する
設定ファイルを変更した後に反映させるには restart または reload を使います。# プロセスを完全に再起動する(接続が一瞬切れる) $ sudo systemctl restart httpd # 設定ファイルだけ再読み込みする(プロセスを落とさない) $ sudo systemctl reload httpd # reload が失敗したら restart にフォールバックする $ sudo systemctl reload-or-restart httpd
自動起動を設定する(enable / disable)
start と stop は「今この瞬間」の操作です。OS 再起動後も自動起動させるには enable、逆に自動起動を無効にするには disable を使います。1. 自動起動を有効にする
# 自動起動を有効にする(次回起動から適用される) $ sudo systemctl enable httpd Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service. # 自動起動の有効化 + 今すぐ起動を1コマンドで行う(--now オプション) $ sudo systemctl enable --now httpd
2. 自動起動を無効にする
# 自動起動を無効にする $ sudo systemctl disable httpd Removed /etc/systemd/system/multi-user.target.wants/httpd.service. # 自動起動の無効化 + 今すぐ停止を1コマンドで行う(--now オプション) $ sudo systemctl disable --now httpd
3. 自動起動の設定状態だけを確認する
# enabled か disabled かを確認する $ systemctl is-enabled httpd enabled # active(起動中)か否かを確認する $ systemctl is-active httpd active
start と enable の違い(混同しやすいポイント)
現場でよく見かけるミスが「enable したのに起動していない」「start したのに再起動後に止まっていた」という混乱です。・start:今すぐサービスを起動する。再起動後は反映されない
・stop:今すぐサービスを停止する。再起動後は元の設定(enabled なら起動する)に戻る
・enable:次回 OS 起動時に自動起動する設定を入れる。今すぐは起動しない
・disable:次回 OS 起動時に自動起動しない設定を入れる。今すぐは停止しない
新規にサーバーへサービスをインストールしたときは `sudo systemctl enable --now サービス名` の一行で「今すぐ起動かつ次回から自動起動」を同時に設定するのが実務での定番です。
応用・実務 Tips
1. 設定ファイル変更後にデーモンをリロードする
ユニットファイル(/usr/lib/systemd/system/*.service)を直接編集した場合や、systemctl edit で上書き設定を行った場合は、systemd 自身に変更を読み込ませる必要があります。# ユニットファイルを編集・追加した後は必ず実行する $ sudo systemctl daemon-reload
2. 依存関係を確認する
# あるサービスが依存するユニットを表示する $ systemctl list-dependencies httpd httpd.service * ├─-.mount * ├─system.slice * ├─systemd-journald.socket * └─basic.target * ├─microcode.service ... # 逆に、あるサービスに依存しているユニットを表示する $ systemctl list-dependencies --reverse httpd
3. ユニットファイルの内容を確認する
# ユニットファイルのパスと内容を表示する $ systemctl cat httpd # /usr/lib/systemd/system/httpd.service [Unit] Description=The Apache HTTP Server Wants=httpd-init.service After=network.target remote-fs.target nss-lookup.target httpd-init.service Documentation=man:httpd.service(8) [Service] Type=notify Environment=LANG=C ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND ExecReload=/usr/sbin/httpd $OPTIONS -k graceful ... [Install] WantedBy=multi-user.target
4. マスクでサービスを完全に無効化する
disable は自動起動を無効にするだけで、手動での start は可能です。別のサービスから依存起動される場合も含めて完全に無効化するには mask を使います。# サービスをマスク(完全無効化)する $ sudo systemctl mask httpd Created symlink /etc/systemd/system/httpd.service → /dev/null. # マスクを解除する $ sudo systemctl unmask httpd Removed /etc/systemd/system/httpd.service.
トラブルシュート・エラー対処
「Failed to start」エラーが出た時の対処法
$ sudo systemctl start httpd Job for httpd.service failed because the control process exited with error code. See "journalctl -xe" for details.
# ステップ1: サービスのログを確認する(最近のエラーを表示) $ sudo journalctl -u httpd --since "10 minutes ago" May 02 10:15:33 web01.example.com httpd[8142]: httpd: Syntax error on line 56 of /etc/httpd/conf/httpd.conf: May 02 10:15:33 web01.example.com httpd[8142]: Invalid command 'Servre', perhaps misspelled # ステップ2: 設定ファイルの構文チェックを実行する $ sudo httpd -t Syntax error on line 56 of /etc/httpd/conf/httpd.conf: Invalid command 'Servre', perhaps misspelled # ステップ3: 設定ファイルを修正した後に再起動する $ sudo systemctl start httpd
「Unit not found」エラーが出た時の対処法
$ sudo systemctl status httpd Unit httpd.service could not be found. # パッケージがインストールされているか確認する(RHEL系) $ rpm -qa | grep httpd # 何も表示されない場合はインストールが必要 # パッケージをインストールする $ sudo dnf install httpd # インストール後にユニットファイルが認識されているか確認する $ systemctl list-unit-files | grep httpd httpd.service disabled disabled
本記事のまとめ
systemctl の主要操作を一覧にまとめます。| やりたいこと | コマンド |
|---|---|
| サービスを今すぐ起動する | sudo systemctl start サービス名 |
| サービスを今すぐ停止する | sudo systemctl stop サービス名 |
| サービスを再起動する | sudo systemctl restart サービス名 |
| 設定ファイルだけ再読み込みする | sudo systemctl reload サービス名 |
| サービスの状態を確認する | systemctl status サービス名 |
| 自動起動を有効にする | sudo systemctl enable サービス名 |
| 自動起動を無効にする | sudo systemctl disable サービス名 |
| 起動+自動起動を同時に設定する | sudo systemctl enable --now サービス名 |
| 自動起動の設定を確認する | systemctl is-enabled サービス名 |
| 全サービスの一覧を表示する | systemctl list-units --type=service |
| ユニットファイルを更新後に反映する | sudo systemctl daemon-reload |
| サービスを完全に無効化する | sudo systemctl mask サービス名 |
systemctl の操作、コマンドを知っているだけでは現場では通用しません
start と enable の違いを知っていても、「どのタイミングで何を確認するか」という判断軸がなければ障害対応では動けません。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら

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