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-reload | Unit ファイルの変更を systemd に反映する |
enable --now/disable --nowを使えば、自動起動設定と起動・停止を一度に行える- サービスが動かないときは
status→journalctl -u サービスの順で原因を調べる - Unit ファイルを編集したら必ず
daemon-reloadを実行してからrestartする

コメント