systemctlコマンドの使い方|サービスの起動・停止・自動起動設定


この記事の監修:宮崎智広(Linux教育歴15年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxtips > systemctlコマンドの使い方|サービスの起動・停止・自動起動設定
「Linuxでサービスを起動・停止したいけど、systemctlの使い方がわからない」
「自動起動の設定をしたのに、再起動後にサービスが動いていない」

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で特定サービスを完全に無効化する方法

「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

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

startは即座にサービスを起動しますが、再起動後には反映されません。永続化するにはenableが必要です(後述)。

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

PRESET列(右側)はシステムのデフォルト設定値を示します。sshd(SSHサービス)が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

journalctlの詳しい使い方はこちらで解説しています。サービスのトラブルシューティングでは必ずセットで使うコマンドです。

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

上記のstatusの例では、設定ファイルの42行目に「ServerNaem」というタイポ(スペルミス)があることが分かります。よくある「Active: failed」の原因と対処法をまとめます。

設定ファイルのシンタックスエラー:設定ファイルを修正後、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日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。


無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録

宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。