systemctlコマンドの使い方|起動・停止・自動起動を今すぐ確認

コマンドリファレンス

systemctlコマンドで、サービス(デーモン)の起動・停止・再起動・状態確認から、システム起動時の自動起動設定まで一通り行えます。基本操作と使い方を目的別にすぐ確認できるようまとめました。sudo 権限が必要な操作が多いため、権限まわりで迷う場合は sudo コマンドの使い方もあわせて確認してください。

systemctl とは

systemctl は systemd(System and Service Manager)を制御するコマンドです。systemd は現代の Linux ディストリビューション(Ubuntu、Debian、CentOS、RHEL など)で標準的に採用されている init システムで、サービスの起動順序の管理やプロセス監視を担当します。

  • サービス管理:Nginx・MySQL・SSH など各種デーモンの起動・停止・再起動
  • 自動起動設定:OS 起動時にサービスを自動で起動するかどうかの制御
  • 状態確認:サービスが動作中かどうか、直近のログの確認
  • 設定反映:Unit ファイルの変更後に daemon-reload で systemd に読み込ませる

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

systemctl で最もよく使うのはサービスの起動・停止・再起動です。コマンドには sudo が必要です。

コマンド説明
sudo systemctl start サービス名サービスを起動する
sudo systemctl stop サービス名サービスを停止する
sudo systemctl restart サービス名サービスを再起動する(停止してから起動)
sudo systemctl reload サービス名設定ファイルをリロードする(プロセスを停止せずに設定を再読み込み)

start:サービスを起動する

sudo systemctl start nginx

停止中のサービスをその場で起動します。すでに起動中の場合は何もしません(エラーにはならない)。OS の再起動後は自動起動されないため、次回起動時も動かしたい場合は enable を使います。

stop:サービスを停止する

sudo systemctl stop nginx

動作中のサービスを停止します。stop はサービスをその場で停止するだけで、自動起動設定(enable/disable)には影響しません。

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

sudo systemctl restart nginx

サービスを一度停止してから起動します。設定ファイルを変更した後に設定を反映させたいときによく使います。reload と違い、プロセス自体を再起動するため接続が一時的に切れます。

reload:設定ファイルをリロードする

sudo systemctl reload nginx

プロセスを停止せずに設定ファイルを再読み込みします。Nginx のように reload をサポートするサービスでは、接続を維持したまま設定変更を反映できます。サービスが reload に対応していない場合はエラーになります。

サービスが reload に対応しているか不明な場合は restart を使えば確実です。本番サーバーで停止を避けたい場合にのみ reload を検討してください。

systemctl status:状態を確認する

systemctl status nginx

サービスの現在の状態と直近のログを表示します。sudo なしでも実行できます。出力の Main PID に紐づくプロセスの詳細をさらに確認したい場合は ps コマンドで調べられます。

● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2026-06-15 09:00:00 JST; 2h 30min ago
       Docs: man:nginx(8)
    Process: 1234 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
   Main PID: 1235 (nginx)
      Tasks: 3 (limit: 4915)
     Memory: 6.2M
     CGroup: /system.slice/nginx.service
             ├─1235 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             └─1236 nginx: worker process

Jun 15 09:00:00 hostname systemd[1]: Starting A high performance web server...
Jun 15 09:00:00 hostname nginx[1234]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
Jun 15 09:00:00 hostname systemd[1]: Started A high performance web server.

出力の見方は以下のとおりです。

項目説明
Active: active (running)サービスが起動中
Active: inactive (dead)サービスが停止中
Active: failed起動に失敗した状態
Loaded: ... enabled自動起動が有効
Loaded: ... disabled自動起動が無効

systemctl enable / disable:自動起動の設定

OS 起動時にサービスを自動で起動するかどうかは enable / disable で制御します。

enable:自動起動を有効にする

sudo systemctl enable nginx

次回以降の OS 起動時にサービスが自動で起動するようになります。現在のサービスは起動しません。すぐに起動したい場合は start を一緒に使います。

# 自動起動を有効化しつつ、今すぐ起動する
sudo systemctl enable --now nginx

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

sudo systemctl disable nginx

次回以降の OS 起動時にサービスが自動起動しなくなります。現在起動中のサービスは停止しません。

# 自動起動を無効化しつつ、今すぐ停止する
sudo systemctl disable --now nginx

is-enabled:自動起動の状態を確認する

systemctl is-enabled nginx

enabled(有効)または disabled(無効)が表示されます。スクリプト内での判定にも使えます。

# 自動起動が有効なら起動する(スクリプト例)
if ! systemctl is-enabled --quiet nginx; then
  sudo systemctl enable nginx
fi

systemctl 一覧:サービスの一覧表示

現在のサービス状態を一覧で確認するには以下のコマンドを使います。

起動中のサービスを一覧表示

systemctl list-units --type=service

現在 systemd に読み込まれているサービスの一覧を表示します。ACTIVE 列が active のものが動作中です。

UNIT                   LOAD   ACTIVE SUB     DESCRIPTION
cron.service           loaded active running Regular background program processing daemon
nginx.service          loaded active running A high performance web server
ssh.service            loaded active running OpenBSD Secure Shell server
...

起動に失敗したサービスを確認

systemctl list-units --type=service --state=failed

起動に失敗した(failed 状態の)サービスだけを絞り込んで表示します。サーバートラブル時の最初の確認コマンドとして役立ちます。

すべてのサービス(停止中を含む)を一覧表示

systemctl list-units --type=service --all

--all を付けると、inactive(停止中)のサービスも含めてすべて表示されます。

自動起動の設定状態を一覧表示

systemctl list-unit-files --type=service

すべてのサービスユニットファイルと、自動起動(enabled/disabled)の設定状態を一覧表示します。

UNIT FILE                    STATE
cron.service                 enabled
nginx.service                enabled
apache2.service              disabled
...

systemctl daemon-reload:設定ファイルを再読み込みする

daemon-reload は、/etc/systemd/system/ などに配置した Unit ファイルを追加・変更したときに実行します。

sudo systemctl daemon-reload

systemd はサービス定義ファイル(.service ファイル)をメモリ上にキャッシュしています。ファイルを編集しても daemon-reload を実行しないと古い定義のまま動作します。

daemon-reload が必要なケース

  • /etc/systemd/system/myapp.service などのカスタムサービスファイルを新規作成したとき
  • 既存の .service ファイル(ExecStart、Restart、Environment など)を編集したとき
  • パッケージのアップデートで Unit ファイルが更新されたとき
# カスタムサービスを作成・変更した後の典型的な手順
sudo systemctl daemon-reload
sudo systemctl enable --now myapp
sudo systemctl status myapp

daemon-reload はサービス自体を再起動しません。Unit ファイルの変更を systemd に認識させるだけです。設定を反映させるにはその後 restart を実行してください。

トラブル確認の流れ

サービスが起動しない・想定どおりに動かない場合は、以下の手順で原因を特定します。より広範なLinuxのトラブル対処はLinuxトラブルシューティング総合ハブでも整理しています。

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

systemctl status nginx

Active: failed になっている場合、出力の末尾にエラーメッセージが表示されます。ここで原因が分かることも多いです。

2. 詳細ログを journalctl で確認する

# サービスの直近ログを表示
journalctl -u nginx

# リアルタイムでログを流す
journalctl -u nginx -f

# 起動失敗の直前のログを確認(起動時間ごとにまとめて見る)
journalctl -u nginx -b

journalctl -u サービス名 でそのサービスのログだけを抽出できます。-b は現在の起動セッション分のみ表示します。時刻指定やログレベルでの絞り込みなど、詳しいオプションは journalctl オプション一覧で解説しています。

3. 設定ファイルの文法チェックを行う

# Nginx の場合
sudo nginx -t

# Apache の場合
sudo apache2ctl configtest

設定ファイルの文法エラーが原因で起動できないケースは多いです。サービス固有のチェックコマンドで事前に確認します。Nginx が絡む 500 エラーの切り分け方は 500エラーの原因切り分けでも解説しています。

4. Unit ファイルを変更した場合は daemon-reload を忘れずに

sudo systemctl daemon-reload
sudo systemctl restart nginx
systemctl status nginx

5. 起動に失敗したサービスをリセットして再試行する

# failed 状態をリセットする
sudo systemctl reset-failed nginx

# 再起動を試みる
sudo systemctl start nginx

failed 状態のままだと次の start が拒否される場合があります。reset-failed で状態をクリアしてから再試行します。

まとめ

systemctl のよく使うコマンドをまとめます。

コマンド用途
systemctl start サービスサービスを起動する
systemctl stop サービスサービスを停止する
systemctl restart サービスサービスを再起動する
systemctl reload サービスプロセスを停止せず設定を再読み込みする
systemctl status サービス状態と直近のログを確認する
systemctl enable サービス自動起動を有効にする
systemctl disable サービス自動起動を無効にする
systemctl list-units --type=serviceサービスの一覧を表示する
systemctl daemon-reloadUnit ファイルの変更を systemd に反映する
  • enable --now / disable --now を使えば、自動起動設定と起動・停止を一度に行える
  • サービスが動かないときは statusjournalctl -u サービス の順で原因を調べる
  • Unit ファイルを編集したら必ず daemon-reload を実行してから restart する
Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント