【Ubuntu】systemctl の基本:status / start / restart / enable(障害対応の型)
この記事で解決できること
- Ubuntuでサービス(Nginx/Apache/SSHなど)を
systemctlで操作できるようになります - 「動かない」「再起動したい」「自動起動したい」を最短で切り分けできます
- 障害対応でよく使う"定番の型"が身につきます
結論(最短)
まずはこれだけ覚えれば現場で困りません。
- 状態確認:
systemctl status <service> - 起動:
systemctl start <service> - 停止:
systemctl stop <service> - 再起動:
systemctl restart <service> - 設定を読み直して再起動:
systemctl reload <service>(対応していれば) - 自動起動ON:
systemctl enable <service> - 自動起動OFF:
systemctl disable <service>
Ubuntuでは多くの場合、管理者権限が必要なので sudo を付けます。
目次
前提(対象環境)
- OS:Ubuntu
- systemd を使用している環境
- 権限:
sudoが使える想定
1. systemctl とは?
systemctl は systemd のサービス管理コマンドです。
サーバ上で動いているサービス(例:nginx, apache2, ssh, docker など)を、起動/停止/再起動/状態確認できます。
2. まずは「状態確認」から(status)
障害対応はまずここから始めます。
$ sudo systemctl status nginx
よく見るポイント:
Active: active (running)→ 動いているActive: inactive (dead)→ 止まっているActive: failed→ 失敗している(原因調査が必要)
failed の場合は、後述の journalctl -u でログを見るのが最短です。
3. 起動・停止・再起動(start/stop/restart)
3-1. 起動
$ sudo systemctl start nginx
3-2. 停止
$ sudo systemctl stop nginx
3-3. 再起動
$ sudo systemctl restart nginx
設定を直した後は基本 restart。
reload対応なら reload で"落とさずに"反映できる場合もあります。
4. reload / reload-or-restart(設定反映の扱い)
4-1. reload(対応しているサービスのみ)
$ sudo systemctl reload nginx
4-2. reload-or-restart(迷うならこれが安全)
$ sudo systemctl reload-or-restart nginx
- reload対応なら reload
- 対応していなければ restart
5. 自動起動(enable/disable)※新人が詰まりやすいポイント
「今は動いてるけど、再起動したら落ちる」問題はここです。
5-1. 自動起動をON
$ sudo systemctl enable nginx
5-2. 自動起動をOFF
$ sudo systemctl disable nginx
5-3. 自動起動状態を確認
$ systemctl is-enabled nginx
出力例:
enabled:自動起動ONdisabled:自動起動OFF
6. "動かない"ときの定番手順(障害対応の型)
6-1. statusで状態確認
$ sudo systemctl status nginx
6-2. failedならログを見る(これが最短)
$ sudo journalctl -u nginx -n 200
リアルタイム追跡:
$ sudo journalctl -u nginx -f
6-3. 設定ミスの可能性が高いなら(例:nginx)
サービス固有の構文チェックがある場合は先に実行:
$ sudo nginx -t
設定が壊れている状態で restart すると、止まったままになることがあります。
まずは構文チェック → OKなら restart が安全です。
7. サービス名(unit名)が分からない時
サービス名は環境で微妙に違います(例:Ubuntuだと Apache は apache2 が多い)。
一覧から探す:
$ systemctl list-units --type=service | grep -i apache
全部表示(多いので注意):
$ systemctl list-units --type=service
8. よくあるつまずき
8-1. statusは「起動してるのに」アクセスできない
サービスが起動していても、ポート待受やFW、アプリ側エラーで繋がらないことがあります。
「ポート疎通(ss/lsof/nc/curl)」とセットで切り分けると早いです。
8-2. enableしたのに起動してない
enable は「次回起動時に自動起動する設定」です。
今すぐ起動したいなら start も必要です。
$ sudo systemctl enable nginx $ sudo systemctl start nginx
まとめ(コピペ用)
# 状態確認 sudo systemctl status <service> # 起動/停止/再起動 sudo systemctl start <service> sudo systemctl stop <service> sudo systemctl restart <service> # 設定反映(対応していれば) sudo systemctl reload <service> sudo systemctl reload-or-restart <service> # 自動起動 sudo systemctl enable <service> sudo systemctl disable <service> systemctl is-enabled <service> # ログ sudo journalctl -u <service> -n 200 sudo journalctl -u <service> -f
検証環境
本記事のコマンドは Ubuntu 24.04 LTS / bash 5.2 で動作確認済みです。