システム管理 中級

systemctlでサービスを管理する

systemdを使ってLinuxのサービス(デーモン)を起動・停止・自動起動設定する方法を学ぶ

現代のLinuxディストリビューション(Ubuntu、CentOS、Debian など)はほぼすべて systemd を採用しています。 systemctl コマンドを使いこなすことで、Webサーバーやデータベースなどのサービスを自在に管理できるようになります。

systemd とは

systemd はLinuxの init システムです。OSが起動した直後(PID 1)に立ち上がり、他のすべてのプロセスを管理します。 サービスの起動順序の制御、並列起動による高速化、障害時の自動再起動など、多くの機能を提供しています。

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

systemctl status でサービスの状態を確認できます。

systemctl status nginx

出力例:

● nginx.service - A high performance web server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled)
     Active: active (running) since Wed 2026-07-30 10:00:00 JST; 2h ago
   Main PID: 1234 (nginx)
  • Active: active (running) → 稼働中
  • Active: inactive (dead) → 停止中
  • Active: failed → 異常終了

サービスの起動・停止・再起動

# サービスを起動する
sudo systemctl start nginx

# サービスを停止する
sudo systemctl stop nginx

# サービスを再起動する(一度停止してから起動)
sudo systemctl restart nginx

# 設定ファイルを再読み込みする(停止せずに反映)
sudo systemctl reload nginx

reload はサービスを止めずに設定を再読み込みするため、Webサーバーなど常時稼働が必要なサービスに有効です。 ただし、すべてのサービスが reload に対応しているわけではありません。

自動起動の設定(enable / disable)

OSを再起動したときに自動でサービスを起動させるには enable を使います。

# 自動起動を有効にする
sudo systemctl enable nginx

# 自動起動を無効にする
sudo systemctl disable nginx

有効化すると /etc/systemd/system/ 以下にシンボリックリンクが作成されます。

起動と同時に自動起動も設定したい場合は --now オプションが便利です。

sudo systemctl enable --now nginx

全サービスの一覧を確認する

# 起動中のサービス一覧
systemctl list-units --type=service --state=running

# すべてのサービス一覧(停止中も含む)
systemctl list-units --type=service --all

自動起動が設定されているサービスだけを確認するには:

systemctl list-unit-files --type=service | grep enabled

ログを確認する(journalctl)

systemd の管理下にあるサービスのログは journalctl で確認できます。

# nginx のログを表示(最新50行)
journalctl -u nginx -n 50

# リアルタイムでログを追いかける
journalctl -u nginx -f

# 今日のログだけ表示
journalctl -u nginx --since today

-f オプション(follow)はサービスの動作確認に非常に役立ちます。

サービスの依存関係を確認する

サービスがどのサービスに依存しているかを調べることができます。

systemctl list-dependencies nginx

systemd のデーモン設定を再読み込みする

ユニットファイル(.service ファイル)を手動で編集した場合は、systemd に変更を知らせる必要があります。

sudo systemctl daemon-reload

これを忘れると古い設定のままになるので注意してください。


練習問題

問題1

SSH サービス(sshd)が現在動いているかどうかを確認するコマンドを書いてください。

問題2

cron サービスを再起動せずに設定を再読み込みするコマンドを書いてください。

問題3

nginx サービスを起動し、同時に次回OS起動時にも自動で起動するように設定するコマンドを1行で書いてください。

問題4

ssh サービスのログを新しい順にリアルタイムで追いかけるコマンドを書いてください。


解答

解答1

systemctl status sshd

または is-active を使うとより簡潔に確認できます:

systemctl is-active sshd

active と表示されれば稼働中、inactive なら停止中です。

解答2

sudo systemctl reload cron

ただし cronreload に対応していない場合は restart を使います。

解答3

sudo systemctl enable --now nginx

--now オプションで enable と start を同時に実行できます。

解答4

journalctl -u ssh -f

-u でサービス名を指定し、-f でリアルタイム追跡(follow)します。 サービス名は sshd または ssh のどちらでも構いません(ディストリビューションによって異なります)。