「自動起動の設定をしたのに、再起動後にサービスが動いていない」
RHEL7/CentOS7以降のLinuxでは、サービス管理はすべてsystemctlコマンドで行います。以前のservice/chkconfigコマンドに代わる、現代Linuxの必須コマンドです。
この記事では、systemctlの基本操作から、自動起動設定、サービスの状態確認、トラブル対処まで実務で必要な知識を網羅します。
systemctlとは?
systemctlは、systemd(Linuxのシステムおよびサービス管理の仕組み)を操作するためのコマンドです。RHEL7/CentOS7以降、Ubuntu 16.04以降など、現在主流のLinuxディストリビューションではsystemdが標準で採用されています。以前のSysVinit環境で使っていたservice/chkconfigコマンドは、systemctlに置き換わりました。
・旧:service httpd start / chkconfig httpd on
・新:systemctl start httpd / systemctl enable httpd
サービスの起動・停止・再起動
1. サービスを起動する(start)
# httpdを起動 sudo systemctl start httpd # nginxを起動 sudo systemctl start nginx
2. サービスを停止する(stop)
# httpdを停止 sudo systemctl stop httpd
3. サービスを再起動する(restart)
設定ファイルを変更した後など、サービスを再起動して反映させます。# httpdを再起動(一度停止してから起動) sudo systemctl restart httpd
4. サービスをリロードする(reload)
reloadは、サービスを停止せずに設定ファイルだけを再読み込みします。Webサーバーなど、停止させたくないサービスで使います。# 設定ファイルだけ再読み込み(サービスは止まらない) sudo systemctl reload httpd # reloadに対応していないサービスもある。その場合はrestartを使う # reload失敗時にrestartにフォールバックする方法 sudo systemctl reload-or-restart httpd
サービスの状態を確認する
1. 詳細なステータスを確認する(status)
最もよく使うサブコマンドです。サービスの稼働状況、PID、最近のログが一覧で表示されます。systemctl status httpd # 出力例 * httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; preset: disabled) Active: active (running) since Tue 2026-03-18 10:00:00 JST; 2h ago Main PID: 1234 (httpd) Tasks: 213 Memory: 45.2M CGroup: /system.slice/httpd.service
・Active: active (running):正常に稼働中
・Active: inactive (dead):停止中
・Active: failed:起動に失敗
・Loaded: enabled:自動起動が有効
・Loaded: disabled:自動起動が無効
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
自動起動の設定
1. 自動起動を有効にする(enable)
OS起動時にサービスが自動的に立ち上がるようにします。# 自動起動を有効にする sudo systemctl enable httpd # enableと同時に今すぐ起動もする(--now) sudo systemctl enable --now httpd
2. 自動起動を無効にする(disable)
# 自動起動を無効にする sudo systemctl disable httpd # 無効化と同時に今すぐ停止する sudo systemctl disable --now httpd
3. サービスの一覧を表示する(list-unit-files)
すべてのサービスの自動起動状態を一覧表示します。# 全サービスの自動起動状態を表示 systemctl list-unit-files --type=service # enabledのサービスだけ絞り込む systemctl list-unit-files --type=service --state=enabled # 現在稼働中のサービスだけ表示 systemctl list-units --type=service --state=running
応用・実務Tips
1. サービスの起動に失敗した原因を調べる
statusで「failed」と表示された場合、原因を特定するにはjournalctlでログを確認します。# 該当サービスのログを表示 sudo journalctl -u httpd --no-pager -n 50 # 直近の起動失敗のログだけ確認 sudo journalctl -u httpd --since "10 minutes ago"
2. サービスの依存関係を確認する
あるサービスが別のサービスに依存している場合、依存先が起動していないと起動に失敗します。# httpdの依存関係を表示 systemctl list-dependencies httpd
3. systemdの設定を再読み込みする(daemon-reload)
ユニットファイル(.serviceファイル)を新規作成したり編集した場合は、daemon-reloadで反映させます。# ユニットファイルの変更をsystemdに反映 sudo systemctl daemon-reload # その後サービスを再起動 sudo systemctl restart myapp
4. マスクでサービスを完全に無効化する(mask)
disableは自動起動を無効にするだけで、手動でstartすれば起動できます。maskを使うと、手動起動も含めて完全にブロックします。# サービスを完全に無効化(手動起動もブロック) sudo systemctl mask firewalld # マスクを解除 sudo systemctl unmask firewalld
トラブルシュート・エラー対処
「Failed to start」でサービスが起動しない場合
# 1. statusで状態とエラーメッセージを確認 sudo systemctl status httpd # 2. journalctlで詳細ログを確認 sudo journalctl -u httpd -n 30 --no-pager # 3. 設定ファイルの構文チェック(Apache/Nginxの場合) httpd -t nginx -t
「enableしたのに再起動後にサービスが動いていない」場合
# is-enabledで自動起動の設定を確認 systemctl is-enabled httpd # enabledなのに起動していない場合はログを確認 sudo journalctl -b -u httpd
旧コマンド(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 |
本記事のまとめ
| やりたいこと | コマンド |
|---|---|
| サービスを起動する | 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 list-unit-files --type=service |
| サービスを完全に無効化する | sudo systemctl mask サービス名 |
サービス管理だけで終わらせていませんか?
systemctlによるサービス管理はサーバー運用の基本ですが、本番環境ではファイアウォール設定やログ管理、セキュリティ対策まで一通りの知識が求められます。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
登録10秒/自動返信でDL/合わなければ解除3秒
