Ubuntuでサーバーを運用する際、Webサーバー(NginxやApache)やデータベース(MariaDB、PostgreSQL)、SSHといったバックグラウンドサービス(デーモン)の管理に欠かせないのが「systemctl」コマンドです。
「設定ファイルの変更を反映したい」「サービスが正常に稼働しているか確認したい」「OS再起動時にサービスが自動起動するように設定したい」といった場面で必要になります。
この記事では、「systemctl」の基本的な使用方法を分かりやすく解説します。
systemctlコマンドとは?
「systemctl」は、Ubuntuをはじめとする主要なLinuxディストリビューションで標準採用されている、システムやサービスを管理している「systemd」を操作・制御するためのコマンドです。
Linuxカーネルが起動した後に実行される「systemd」に対して指示を送り、Webサーバーやデータベースなどの常駐プログラム(サービス / デーモン)の起動・停止・再起動・ステータス確認を行ったり、OS起動時に自動起動させるかどうかの登録・解除を行ったりします。
基本の操作
サーバー運用で日常的に使用する基本のコマンドを解説します。
- サービスの状態確認: systemctl status サービス名
- サービスの起動: systemctl start サービス名
- サービスの停止: systemctl stop サービス名
- サービスの再起動: systemctl restart サービス名
- サービスの設定再読込: systemctl reload サービス名
サービスの起動・停止などシステムに変更を加える操作には sudo(root権限)が必要です。
状態確認 (status)
現在のサービスの状況を表示します。
参照のみのため、一般ユーザー権限でも実行可能です。
$ systemctl status サービス名
表示された内容の 「Active:」項目に、サービスの稼働状況が表示されます。
- 稼働中: active (running)
- 停止中: inactive (dead)
画面の終了方法とスクロール
「systemctl status」を実行するとログが画面いっぱいに表示され、ページャー(通常は less)が起動して、元のコマンド入力に戻れなくなることがあります。
- 終了方法: キーボードの「q」キーを押すか、「Ctrl + c」を入力するとプロンプトに戻ります。
- 画面のスクロール: 矢印キー(上下)または「j」キー(下移動)、「k」キー(上移動)でスクロールして表示内容を確認できます。
実行例
Nginxを例に、現在の状態を表示してみます。
$ systemctl status nginx
* nginx.service - nginx - high performance web server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: enabled)
Active: active (running) since Thu 2026-09-17 18:15:35 JST; 11min ago
Docs: https://nginx.org/en/docs/
Process: 134051 ExecStart=/usr/sbin/nginx -c ${CONFFILE} $cmdopts (code=exited, status=0/SUCCESS)
Main PID: 134052 (nginx)
Tasks: 5 (limit: 9370)
Memory: 6.2M (peak: 6.3M)
CPU: 30ms
CGroup: /system.slice/nginx.service
|-134052 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
|-134053 "nginx: worker process"
|-134054 "nginx: worker process"
lines 1-13
サービスが起動している状態
サービスが起動している場合は、「Active:」の項目に「active (running)」と表示されます。
Active: active (running) since Thu 2026-09-17 18:15:35 JST; 20h ago
since以降には、サービスがいつから起動(稼働)しているかが表示されます。
サービスが停止している状態
サービスが起動している場合は、「Active:」の項目に「inactive (dead)」と表示されます。
Active: inactive (dead) since Fri 2026-09-18 14:45:58 JST; 7s ago
since以降にサービスが停止した日時が表示されます。
起動 (start)
起動するサービスを指定し、コマンドを実行します。
sudo systemctl start サービス名
実行例
Nginxを起動します。
$ sudo systemctl start nginx
コマンドが正常に終了した場合、画面には何もメッセージが表示されません。
「systemctl status サービス名」を実行して、正常に起動したか確認してください。
停止 (stop)
停止するサービスを指定して、コマンドを実行します。
sudo systemctl stop サービス名
実行例
Nginxを停止します。
$ sudo systemctl stop nginx
起動時と同様に出力は無いため、停止したかどうかは「systemctl status サービス名」で確認します。
再起動 (restart)
サービスを一度停止させ、直後に再度起動します。
sudo systemctl restart サービス名
実行例
Nginxを再起動します。
$ sudo systemctl restart nginx
再起動が完了したかどうかは、「systemctl status サービス名」を実行し、「Active:」項目のsinceの日時が最新の再起動日時に更新されているかで判断できます。
設定の再読み込み (reload)
サービスを停止させずに、設定ファイルの変更内容だけを安全に再反映させたい場合は「reload」を使用します。
sudo systemctl reload サービス名
アクセス中の接続を切断したくない場合は「restart」ではなく「reload」を使うのが定石です。
ただし、対象サービスがリロード機能に対応している必要があります。
OS起動時の自動起動(is-enabled / enable / disable)
サーバーが再起動した際に、対象のサービスが自動で起動するかどうかを設定・確認します。
- 自動起動設定の確認: systemctl is-enabled サービス名
- 自動起動の登録: systemctl enable サービス名
- 自動起動の解除: systemctl disable サービス名
自動起動設定の確認(is-enabled)
自動起動設定が登録されているを確認する場合は、以下のコマンドを実行します。
参照のみなので、一般ユーザでコマンドを実行することが出来ます。
systemctl is-enabled サービス名
設定内容は以下のように表示されます。
- 自動起動が有効: enabled
- 自動起動が無効: disabled
実行例
実際にNginxの自動起動設定を確認してみます。
$ systemctl is-enabled nginx disabled
「disabled」と表示された場合、OS起動時の自動起動が無効になっています。
自動起動の登録 (enable)
サービスをOS起動時に自動起動するように登録します。
sudo systemctl enable サービス名
「--now」オプションを使用すると、自動起動の登録と同時に、現在停止しているサービスを即座に起動することができます。
sudo systemctl enable --now サービス名
実行例
Nginxの自動起動化と、「--now」オプションを使ったサービスの起動を同時に行います。
$ sudo systemctl enable --now nginx Synchronizing state of nginx.service with SysV service script with /usr/lib/systemd/systemd-sysv-install. Executing: /usr/lib/systemd/systemd-sysv-install enable nginx Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service.
「systemctl status」で確認すると、サービスが起動状態(active)になっていることが確認できます。
$ sudo systemctl status nginx
● nginx.service - nginx - high performance web server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: enabled)
Active: active (running) since Fri 2026-09-18 15:41:12 JST; 14s ago
Docs: https://nginx.org/en/docs/
Process: 158163 ExecStart=/usr/sbin/nginx -c ${CONFFILE} $cmdopts (code=exited, status=0/SUCCESS)
Main PID: 158164 (nginx)
Tasks: 5 (limit: 9370)
Memory: 5.0M (peak: 5.1M)
CPU: 23ms
CGroup: /system.slice/nginx.service
「is-enabled」で確認すると「enabled」と表示され、自動起動が登録されていることが確認できます。
$ sudo systemctl is-enabled nginx enabled
可能であれば、実際にサーバを再起動して起動確認も行っておくと安心です。
自動起動の解除 (disable)
サービスの自動起動を解除します。
sudo systemctl disable サービス名
「--now」オプションを使用すると、自動起動の解除と同時にサービスの即時停止も行えます。
sudo systemctl disable --now サービス名
実行例
Nginxの自動起動を解除してみます。
$ sudo systemctl disable nginx Synchronizing state of nginx.service with SysV service script with /usr/lib/systemd/systemd-sysv-install. Executing: /usr/lib/systemd/systemd-sysv-install disable nginx Removed "/etc/systemd/system/multi-user.target.wants/nginx.service".
自動起動設定が解除されたことを確認します。
$ sudo systemctl is-enabled nginx disabled
自動起動設定を解除しただけでは、現状稼働しているサービスは停止しません。
ステータスを確認すると、サービス自体は「active (running)」のまま動作し続けています。
サービスを停止したい場合は、別途「systemctl stop サービス名」で停止させる必要があります。
$ sudo systemctl status nginx
● nginx.service - nginx - high performance web server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; preset: enabled)
Active: active (running) since Fri 2026-09-18 15:41:12 JST; 5h 7min ago
Docs: https://nginx.org/en/docs/
Main PID: 158164 (nginx)
Tasks: 5 (limit: 9370)
Memory: 896.0K (peak: 5.1M swap: 4.2M swap peak: 4.2M)
CPU: 23ms
CGroup: /system.slice/nginx.service
├─158164 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
自動起動の登録解除を行う際に、「--now」オプションを使用すると稼働中のサービスの停止も同時に行うことが出来ます。
$ sudo systemctl disable --now nginx Synchronizing state of nginx.service with SysV service script with /usr/lib/systemd/systemd-sysv-install. Executing: /usr/lib/systemd/systemd-sysv-install disable nginx Removed "/etc/systemd/system/multi-user.target.wants/nginx.service".
サービスのステータスを確認すると、「Active: inactive (dead)」と表示されているので、停止していることが分かります。
$ sudo systemctl status nginx
○ nginx.service - nginx - high performance web server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; preset: enabled)
Active: inactive (dead)
Docs: https://nginx.org/en/docs/
設定変更時の重要コマンド:daemon-reload
自分で作成した自作サービスや、既存のサービス設定ファイル(Unit定義ファイル:/etc/systemd/system/*.service など)を新規作成・編集した場合は、変更内容を「systemd」に再認識させるために以下のコマンドを実行します。
sudo systemctl daemon-reload
なぜ daemon-reload が必要なのか?
システム管理を行う「systemd」は、動作を高速にするためにOS起動時等に設定ファイルの内容を、メモリ上にキャッシュして管理しています。
そのため、設定ファイルを書き換えてもメモリ上のキャッシュが更新されるまでは変更が認識されません。
「systemctl daemon-reload」を実行することで、「systemd」に対して「ファイルが新しくなったから、もう一度読み直して最新にしてね」と指示を出し、設定を正しく同期させることができます。
実行を忘れた場合の警告メッセージ
「daemon-reload」を実行せずに「systemctl start」や「systemctl status」などを実行すると、端末に以下のような警告メッセージが表示されます。
Warning: The unit file, source configuration file or drop-ins of サービス名 changed on disk. Run 'systemctl daemon-reload' to reload units.
実際の表示例
自作アプリケーション(html_converter.service)の設定ファイルを変更した後、「daemon-reload」を実行せずにサービスを起動しようとしたときの実行ログです。
$ sudo systemctl start html_converter.service Warning: The unit file, source configuration file or drop-ins of html_converter.service changed on disk. Run 'systemctl daemon-reload' to reload units.
この警告が表示された場合は、メッセージの指示通り「sudo systemctl daemon-reload」を実行すれば解消されます。
daemon-reload だけではサービス自体は更新されません!
「systemctl daemon-reload」は「systemd が設定ファイルを読み直しただけ」の状態です。
稼働中のサービスに設定変更を反映させるには、「daemon-reload」の後に必ずサービスの再起動(またはリロード)を行ってください。

コメント