systemctlでLinuxサービスを管理する方法|start・stop・restart・enableを解説

  • URLをコピーしました!

前の記事では、 pstopでプロセスを確認し、 killでプロセスへ終了シグナルを送る方法を学習しました。

では、WebサーバやSSHサーバなど、 Linux上で継続的に動作するサービスを 起動・停止したい場合はどうすればよいのでしょうか。

たとえばnginxを停止するときに、 毎回PIDを調べてkillするのは効率的ではありません。

nginxが動いているか確認したい。
SSHサービスを再起動したい。
OS起動時にサービスを自動起動させたい。

こうしたサービス管理に利用する代表的なコマンドが、 systemctlです。

🐧 LINUX INTERMEDIATE

この記事はLinux中級講座の一部です。 systemdとsystemctlの基本を理解し、 Linuxサービスを管理する方法を学習します。

Linux中級講座を見る →
LESSON GOAL この記事のゴール

Linuxのsystemd・サービス・unitの基本を理解し、 systemctl statusstartstoprestartenabledisableを使って サービスを管理できる状態を目指します。

目次

Linuxの「サービス」とは?

Linuxでは、 バックグラウンドで継続的に動作するプログラムを サービスとして管理することがあります。

代表的なものには次のようなサービスがあります。

WEB nginx

Webページを配信する

SSH sshd

SSH接続を受け付ける

DATABASE mysqld

MySQLを動作させる

SCHEDULER cron / crond

定期実行処理を管理する

これらは内部的にはプロセスとして動作していますが、 運用ではサービス単位で管理することが多くなります。

プロセスとサービスの違い

PROCESS 実行中の処理

Linux上で実際に動いている 個々のプログラムや処理。

ps aux
SERVICE 継続的に管理される機能

WebサーバやSSHなど、 OSによって管理されるサービス。

systemctl
サービスは内部ではプロセスとして動いている

nginxというサービスを起動すると、 実際にはnginxのプロセスが作成されます。 systemctlは、そのサービスを管理するための入口だと考えると分かりやすいです。

systemdとは?

現在の多くのLinuxディストリビューションでは、 サービスやシステムの起動処理を systemdが管理しています。

USER systemctl 管理コマンド
MANAGER systemd サービス管理
SERVICE nginx 起動・停止など

ユーザは systemctlを使ってsystemdへ指示を出し、 systemdがサービスを管理します。

systemdでは「unit」という単位で管理する

systemdでは、 サービスなどの管理対象を unit(ユニット)と呼びます。

たとえばnginxの場合、

nginx.service

というservice unitとして管理されます。

.service サービス
.socket ソケット
.timer タイマー
.mount マウント

今回の記事では、 主に.serviceを扱います。

systemctl nginx ではなく nginx.service を管理している

多くの場合、 systemctl status nginx のように.serviceを省略して指定できます。

systemctl status:サービスの状態を確認する

まず最も重要なのが、 サービスの状態を確認する statusです。

systemctl status nginx
Linux Terminal
$ systemctl status nginx
● nginx.service - The nginx HTTP and reverse proxy server
     Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled)
     Active: active (running) since Wed 2026-08-19 10:15:02 JST
   Main PID: 1250 (nginx)
      Tasks: 3
     Memory: 8.5M

ここでは特に、 Loaded・Active・Main PIDを確認します。

LOADED loaded

unitファイルを読み込めている

ACTIVE active (running)

サービスが動作中

MAIN PID 1250

主要プロセスのPID

Activeの表示を理解しよう

statusで特に重要なのが Activeの行です。

表示 意味
active (running) サービスが実行中
inactive (dead) 停止している
failed 起動失敗などで異常状態
activating 起動処理中
active (running) → 動いている inactive → 止まっている failed → 問題が発生している可能性

systemctl start:サービスを起動する

停止しているサービスを起動するときは、 startを使います。

sudo systemctl start nginx
$ sudo systemctl start nginx

$ systemctl status nginx
Active: active (running)
BEFORE inactive
→ start →
AFTER active

systemctl stop:サービスを停止する

動作中のサービスを停止するときは、 stopを使います。

sudo systemctl stop nginx
BEFORE active
→ stop →
AFTER inactive

サービス停止後は、 statusで状態を確認しましょう。

$ sudo systemctl stop nginx

$ systemctl status nginx
Active: inactive (dead)

systemctl restart:サービスを再起動する

サービスを一度停止してから再び起動したい場合は、 restartを利用します。

sudo systemctl restart nginx
RUNNING
STOP
START
RUNNING

設定変更後にサービスを再起動するといった場面でよく利用します。

restartとreloadの違い

サービスによっては、 reloadを利用できる場合があります。

sudo systemctl reload nginx
RESTART 再起動

サービスを停止してから 再び起動する。

RELOAD 設定再読み込み

サービスを完全停止せず、 設定を読み直せる場合がある。

CHECK すべてのサービスがreloadに対応しているわけではない

reloadの動作はサービスによって異なります。 対象サービスがreloadに対応しているか確認して利用しましょう。

systemctl enable:OS起動時にサービスを自動起動する

ここは初学者が混乱しやすい重要ポイントです。

startは、 「今この瞬間にサービスを起動する」コマンドです。

一方、 enableは 「OS起動時に自動的にサービスを起動する設定」 を行います。

sudo systemctl enable nginx
START 今起動する systemctl start nginx
ENABLE 次回以降も自動起動 systemctl enable nginx
startとenableは別物

enableしただけでは、 現在停止しているサービスが必ずその場で起動するわけではありません。

enable –nowで自動起動設定と起動を同時に行える

現在のサービス起動と 自動起動設定を同時に行いたい場合は、 --nowを利用できます。

sudo systemctl enable --now nginx
enable –now
enable start

systemctl disable:自動起動を無効にする

OS起動時の自動起動を無効にするときは、 disableを利用します。

sudo systemctl disable nginx
BEGINNER POINT disableしても現在動いているサービスは停止しない

disableは自動起動設定を無効にする操作です。 現在のサービスを停止したい場合は systemctl stopを利用します。

自動起動設定を確認する

サービスが自動起動する設定になっているかは、 is-enabledで確認できます。

systemctl is-enabled nginx
$ systemctl is-enabled nginx
enabled

代表的には、

enabled 自動起動する
disabled 自動起動しない

と判断できます。

is-activeで動作中かを簡単に確認する

詳細なstatus表示が不要で、 単純にサービスが動いているかを確認したい場合は is-activeも便利です。

systemctl is-active nginx
$ systemctl is-active nginx
active

systemctlの基本コマンドを整理しよう

コマンド 役割
systemctl status nginx 状態確認
systemctl start nginx 起動
systemctl stop nginx 停止
systemctl restart nginx 再起動
systemctl reload nginx 設定再読み込み
systemctl enable nginx 自動起動を有効化
systemctl disable nginx 自動起動を無効化
systemctl is-active nginx 現在動作中か確認
systemctl is-enabled nginx 自動起動設定を確認

killとsystemctlはどう使い分ける?

前の記事で学習したkillと、 今回のsystemctlは役割が異なります。

KILL プロセスへシグナルを送る kill 1250

PIDなどを指定して、 個々のプロセスへシグナルを送る。

SYSTEMCTL サービスを管理する systemctl stop nginx

systemd配下のサービスとして 起動・停止・再起動などを行う。

サービスなら、まずsystemctlで管理する

systemdが管理しているサービスを停止したい場合は、 基本的にsystemctlを利用します。 単純に関連プロセスをkillするのではなく、 サービス管理の仕組みに沿って操作することが重要です。

実務でよくあるサービス障害の確認手順

たとえば、 Webページへアクセスできなくなったとします。

nginxが動いているLinuxサーバなら、 まずサービス状態を確認できます。

01 状態確認 systemctl status nginx
02 停止・failedを確認 Active: failed
03 原因を確認 ログを確認
04 必要に応じて再起動 systemctl restart nginx
IMPORTANT failedだからすぐrestart、ではなく原因確認も重要

設定ファイルの誤りやポート競合などが原因の場合、 再起動しても再び失敗します。 状態やログを確認して原因を切り分けましょう。

サービスがfailedになったら何を見る?

systemctl statusを実行して、 次のように表示されることがあります。

$ systemctl status nginx
● nginx.service - The nginx HTTP and reverse proxy server
     Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled)
     Active: failed (Result: exit-code)
    Process: 3210 ExecStart=/usr/sbin/nginx
   Main PID: 3210 (code=exited, status=1/FAILURE)

この状態では、 「起動に失敗した」ということは分かりますが、 なぜ失敗したのかまでは十分に分からない場合があります。

そこで重要になるのが、 systemdのログです。

STATUS systemctl

サービスの状態を確認

LOG journalctl

詳細なログを確認

ここで実際に試してみよう:systemctlサービス管理シミュレーター

疑似Linux環境で、 nginxサービスを実際に起動・停止・再起動してみましょう。

INTERACTIVE LAB

systemd Service Manager

RUNNING
SERVICE nginx.service
ACTIVE active
AUTO START enabled
user@linux
systemctl practice
まず「systemctl status nginx」を実行してみましょう。
user@linux:~$
START

サービス状態を確認してみましょう

status → stop → status → start → status の順に試すと、 状態変化が分かりやすくなります。

理解度チェック:startとenableを使い分けよう

SCENARIO nginxは現在起動しています。

しかし、Linuxを再起動した後も nginxが自動的に起動するよう設定したい。

適切なコマンドはどれでしょうか?

回答を選択してください

「今起動する」のか、「次回OS起動時にも起動する」のかを考えてみましょう。

確認問題:systemctlの基本を確認しよう

QUESTION 01

nginxサービスの現在の状態を確認するコマンドはどれですか?

正解:C

statusを使うと、 サービスのActive状態やMain PIDなどを確認できます。

QUESTION 02

nginxサービスを再起動するコマンドはどれですか?

正解:A

restartはサービスを停止してから再び起動する操作です。

QUESTION 03

「systemctl disable nginx」の説明として正しいものはどれですか?

正解:B

disableは自動起動設定を無効化します。 現在動いているサービスを停止する操作とは別です。

YOUR SCORE 0 / 3

3問に挑戦してみましょう。

まとめ

01

現在の多くのLinuxでは、 systemdがサービスを管理している

02

systemctl statusで サービスの状態を確認できる

03

startstoprestartで サービスを起動・停止・再起動できる

04

enabledisableOS起動時の自動起動設定を管理する

05

サービスがfailedになった場合は、 statusだけでなくログを確認して原因を調査する ことが重要

NEXT LESSON

次は「journalctlでsystemdのログを確認する」を学びましょう

systemctlを使って サービスの状態・起動・停止・再起動を管理できるようになりました。

次は、サービスが failedになった原因や起動時のエラーを どのように調査するのかを学習します。

次の記事では、 journalctlを使って systemdが管理するログを確認し、 特定サービスのログや直近のエラーを絞り込む方法を学びます。

journalctlでsystemdのログを確認する
LINUX INTERMEDIATE

Linux中級講座の一覧へ戻る

Linux中級の学習順を確認したい場合は、 講座一覧へ戻りましょう。

← Linux中級講座へ戻る
目次