「自動起動の設定をしたのに、再起動後にサービスが動いていない」
RHEL7/CentOS7以降のLinuxでは、サービス管理はすべてsystemctlコマンドで行います。以前のservice/chkconfigコマンドに代わる、現代Linuxの必須コマンドです。
この記事では、systemctlの基本操作から、自動起動設定、サービスの状態確認、トラブル対処まで実務で必要な知識を網羅します。
動作確認環境:RHEL 9.4 / Rocky Linux 9
・systemctl start/stop/restartでサービスを起動・停止・再起動する方法
・systemctl enableで自動起動を設定する方法(--nowオプション含む)
・systemctl statusでサービスの稼働状態とログを確認する方法
・「Active: failed」の原因をjournalctlで特定する手順
・mask/unmaskで特定サービスを完全に無効化する方法
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
systemctlとは?(systemdのサービス管理コマンド)
systemctlは、systemd(Linuxのシステムおよびサービス管理の仕組み)を操作するためのコマンドです。RHEL7/CentOS7以降、Ubuntu 15.04以降など、現在主流のLinuxディストリビューションではsystemdが標準で採用されています。以前のSysVinit環境で使っていたservice/chkconfigコマンドは、systemctlに置き換わりました。
・旧:service httpd start / chkconfig httpd on
・新:systemctl start httpd / systemctl enable httpd
chkconfigの使い方はこちらで詳しく解説しています。旧環境との違いを整理しておくと、移行作業でも迷わなくなります。
systemdはシステム起動時に最初に実行されるプロセス(PID 1)で、サービスの依存関係を管理しながら並列起動を制御します。従来のSysVinitより起動が速く、設定も柔軟です。
サービスの起動・停止・再起動
systemctlの基本コマンドを順番に見ていきましょう。以下の例ではApache(httpd)を対象にしています。1. サービスを起動する(start)
# 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 Sat 2026-04-04 09:12:35 JST; 3s ago Docs: man:httpd.service(8) Main PID: 2345 (httpd) Status: "Started, listening on: port 80" Tasks: 213 (limit: 23065) Memory: 36.2M CPU: 145ms CGroup: /system.slice/httpd.service |-2345 /usr/sbin/httpd -DFOREGROUND
2. サービスを停止する(stop)
# httpdを停止 sudo systemctl stop httpd # 停止確認 sudo systemctl status httpd * httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; preset: disabled) Active: inactive (dead) since Sat 2026-04-04 09:15:10 JST; 2s ago
Active: inactive (dead)と表示されれば、正常に停止しています。本番環境でサービスを停止する際は、接続中のユーザーへの影響を必ず確認してから実行してください。
3. サービスを再起動する(restart)
設定ファイルを変更した後など、サービスを再起動して反映させます。# httpdを再起動(一度停止してから起動) sudo systemctl restart httpd
restartは「停止してから起動」するため、サービスが一瞬でも止まります。設定ファイルを変更した後に再起動する際、サービスによってはreloadの方がダウンタイムを減らせます。4. 設定ファイルだけ再読み込みする(reload)
reloadは、サービスを停止せずに設定ファイルだけを再読み込みします。Webサーバーなど、停止させたくないサービスで使います。# 設定ファイルだけ再読み込み(サービスは止まらない) sudo systemctl reload httpd # reloadに対応していないサービスもある。その場合はrestartを使う # reload失敗時にrestartにフォールバックする方法 sudo systemctl reload-or-restart httpd
reloadに対応しているわけではありません。対応していないサービスではreloadが失敗しますので、その場合はreload-or-restartを使うかrestartに切り替えましょう。サービスの状態を確認する(status / is-active)
1. 詳細なステータスを確認する(status)
最もよく使うサブコマンドです。サービスの稼働状況、PID、最近のログが一覧で表示されます。単なる起動/停止の確認だけでなく、直近のログも表示されるため、障害時の初動調査でも非常に役立ちます。sudo systemctl status httpd # 出力例 * httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; preset: disabled) Active: active (running) since Sat 2026-04-04 09:12:35 JST; 1h 5min ago Docs: man:httpd.service(8) Main PID: 2345 (httpd) Status: "Total requests: 124; Idle/Busy workers 100/0;..." Tasks: 213 (limit: 23065) Memory: 42.7M CPU: 1.254s CGroup: /system.slice/httpd.service |-2345 /usr/sbin/httpd -DFOREGROUND |-2346 /usr/sbin/httpd -DFOREGROUND Apr 04 09:12:35 server01.example.com systemd[1]: Starting The Apache HTTP Server... Apr 04 09:12:36 server01.example.com httpd[2345]: AH00558: httpd: Could not reliably... Apr 04 09:12:36 server01.example.com systemd[1]: Started The Apache HTTP Server.
・Loaded行:ユニットファイルのパスと自動起動(enabled/disabled)の状態
・Active行:現在の稼働状態と起動からの経過時間
・Main PID:メインプロセスのPID(プロセスID)
・CGroup:このサービスが管理している全プロセスの一覧
・下部のログ:systemdが記録した直近のジャーナルログ
Active行で特に重要なのは次のキーワードです。
・Active: active (running):正常に稼働中
・Active: active (exited):起動処理が完了して終了(one-shotタイプのサービス)
・Active: inactive (dead):停止中
・Active: failed:エラーで停止している
2. 起動中かどうかだけ確認する(is-active)
スクリプト内で稼働状態を判定する場合に便利です。systemctl is-active httpd active # スクリプトでの使用例 if systemctl is-active --quiet httpd; then echo "httpdは稼働中です" fi
3. 自動起動が有効かどうか確認する(is-enabled)
systemctl is-enabled httpd enabled
自動起動の設定(enable / disable)
サーバーを再起動した後も自動でサービスを起動させたい場合は、enableを使います。1. 自動起動を有効にする(enable)
OS起動時にサービスが自動的に立ち上がるようにします。# 自動起動を有効にする sudo systemctl enable httpd Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service -> /usr/lib/systemd/system/httpd.service. # enableと同時に今すぐ起動もする(--now) sudo systemctl enable --now httpd
enableを実行すると、/etc/systemd/system/配下にシンボリックリンクが作成されます。これがOS起動時に読み込まれ、サービスが自動起動する仕組みです。--nowオプションを使えば、enableとstartを1コマンドで実行できます。サーバー構築時に便利です。2. 自動起動を無効にする(disable)
# 自動起動を無効にする sudo systemctl disable httpd Removed /etc/systemd/system/multi-user.target.wants/httpd.service. # 無効化と同時に今すぐ停止する sudo systemctl disable --now httpd
disableはシンボリックリンクを削除するだけで、現在稼働中のサービスは止まりません。「次回の再起動から自動起動させない」という意味です。3. サービスの一覧を表示する(list-unit-files)
すべてのサービスの自動起動状態を一覧表示します。# 全サービスの自動起動状態を表示 systemctl list-unit-files --type=service | grep -E "enabled|disabled" | head -15 atd.service enabled enabled auditd.service enabled enabled chronyd.service enabled enabled crond.service enabled enabled firewalld.service enabled enabled httpd.service disabled disabled rsyslog.service enabled enabled sshd.service enabled enabled tuned.service enabled enabled # 現在稼働中のサービスだけ表示 systemctl list-units --type=service --state=running # 失敗しているサービスだけを表示 systemctl list-units --type=service --state=failed
enabledになっていることを確認しておくのは、サーバー管理の基本です。実務では
--state=failedを使って問題が出ているサービスを素早く絞り込むことも多いです。応用・実務Tips
1. サービスの起動に失敗した原因を調べる
statusで「failed」と表示された場合、原因を特定するにはjournalctlでログを確認します。# 該当サービスのログを表示 sudo journalctl -u httpd --no-pager -n 50 # 直近の起動失敗のログだけ確認 sudo journalctl -u httpd --since "10 minutes ago" # リアルタイムでログを追いかける sudo journalctl -u httpd -f
2. サービスの依存関係を確認する
あるサービスが別のサービスに依存している場合、依存先が起動していないと起動に失敗します。本番環境でサービスを停止・再起動する前に、他のサービスが依存していないか確認しておくことが重要です。# httpdの依存関係を表示(httpdが依存しているサービス) systemctl list-dependencies httpd httpd.service * -.mount * /dev/full * /dev/null ... # httpdに依存しているサービスを確認(逆引き) systemctl list-dependencies --reverse httpd httpd.service * multi-user.target
3. systemdの設定を再読み込みする(daemon-reload)
ユニットファイル(.serviceファイル)を新規作成したり編集した場合は、daemon-reloadで反映させます。# ユニットファイルの変更をsystemdに反映 sudo systemctl daemon-reload # その後サービスを再起動 sudo systemctl restart myapp
systemctl daemon-reloadを実行してください。これを忘れると変更が反映されず、「Unit not found」や古い設定が使われるトラブルにつながります。4. マスクでサービスを完全に無効化する(mask)
disableは自動起動を無効にするだけで、手動でstartすれば起動できます。maskを使うと、手動起動も含めて完全にブロックします。運用ポリシーとして「絶対に起動させてはいけないサービス」がある場合に活用してください。# sendmailをマスク(起動を完全に禁止) sudo systemctl mask sendmail Created symlink /etc/systemd/system/sendmail.service -> /dev/null. # マスク中のサービスを起動しようとすると... # systemctl start sendmail Failed to start sendmail.service: Unit sendmail.service is masked. # マスクを解除 sudo systemctl unmask sendmail Removed /etc/systemd/system/sendmail.service.
maskは/dev/nullへのシンボリックリンクを作成することで、systemdがユニットファイルを読み込めなくします。disableとの違いは「手動起動も禁止する」点です。セキュリティポリシーが厳しい環境や、競合するサービスを完全に封じたい場合に活用してください。トラブルシュート・エラー対処
「Failed to start」でサービスが起動しない場合
# 1. statusで状態とエラーメッセージを確認 sudo systemctl status httpd * httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; preset: disabled) Active: failed (Result: exit-code) since Sat 2026-04-04 10:45:22 JST; 30s ago Process: 3456 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE) Main PID: 3456 (code=exited, status=1/FAILURE) Apr 04 10:45:22 server01.example.com httpd[3456]: AH00526: Syntax error on line 42... Apr 04 10:45:22 server01.example.com httpd[3456]: Invalid command 'ServerNaem',... # 2. journalctlで詳細ログを確認 sudo journalctl -u httpd -n 30 --no-pager # 3. 設定ファイルの構文チェック(Apache/Nginxの場合) httpd -t nginx -t
・設定ファイルのシンタックスエラー:設定ファイルを修正後、
systemctl restartで再起動・ポートの競合:別のプロセスが同じポートを使用中。
ss -tlnpで確認してプロセスを特定・ファイル・ディレクトリの権限不足:エラーログに
Permission deniedが出ている場合はls -laで権限を確認・依存サービスが起動していない:
systemctl list-dependenciesで確認し、依存先を先に起動「enableしたのに再起動後にサービスが動いていない」場合
# is-enabledで自動起動の設定を確認 systemctl is-enabled httpd # enabledなのに起動していない場合はログを確認 sudo journalctl -b -u httpd
-bオプションで今回の起動(ブート)以降のログだけを表示できます。起動時にエラーが発生していないかを確認してください。「Unit not found」が表示される場合
# 存在しないサービスを操作しようとした場合 # systemctl status nginx Unit nginx.service could not be found.
・パッケージが未インストールの場合:
dnf install nginxなどでインストールする・サービス名を間違えている場合:
systemctl list-unit-files | grep nginxで正しい名前を確認する・ユニットファイルを追加した直後の場合:
systemctl daemon-reloadでsystemdにユニットファイルを再読み込みさせる旧コマンド(service/chkconfig)との対応表
| 旧コマンド | systemctlコマンド |
|---|---|
| service httpd start | sudo systemctl start httpd |
| service httpd stop | sudo systemctl stop httpd |
| service httpd restart | sudo systemctl restart 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 |
本記事のまとめ
systemctlのよく使うコマンドを一覧にまとめます。| やりたいこと | コマンド |
|---|---|
| サービスを起動する | sudo systemctl start サービス名 |
| サービスを停止する | sudo systemctl stop サービス名 |
| サービスを再起動する | sudo systemctl restart サービス名 |
| 設定ファイルを再読み込みする | sudo systemctl reload サービス名 |
| サービスの状態を確認する | systemctl status サービス名 |
| 自動起動を有効にする | sudo systemctl enable サービス名 |
| 自動起動を有効にして今すぐ起動する | sudo systemctl enable --now サービス名 |
| 自動起動を無効にする | sudo systemctl disable サービス名 |
| 起動中かどうか確認する | systemctl is-active サービス名 |
| 自動起動の状態を確認する | systemctl is-enabled サービス名 |
| サービス一覧を表示する | systemctl list-unit-files --type=service |
| サービスを完全に無効化する | sudo systemctl mask サービス名 |
| maskを解除する | sudo systemctl unmask サービス名 |
| ユニットファイルを再読み込みさせる | sudo systemctl daemon-reload |
サービス管理だけで終わらせていませんか?
systemctlによるサービス管理はサーバー運用の基本ですが、本番環境ではファイアウォール設定やログ管理、セキュリティ対策まで一通りの知識が求められます。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら

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