Ubuntu でサーバーを運用していると、「nginx を起動したい」「アプリをOS起動時に自動で立ち上げたい」という場面がすぐに出てきます。これらをひとまとめに管理するのが systemd(システムディー)です。
結論から言うと、サービスの起動は sudo systemctl start、自動起動の設定は sudo systemctl enable です。本記事では Ubuntu 24.04 LTS の Docker 公式イメージで実際に動かした結果をもとに、systemd の基本コマンドをひと通り解説します。
この記事のポイント
- Ubuntu 24.04 LTS には
systemd 255(255.4-1ubuntu8.16)が搭載されている(実測) systemctl start/stop/restart/statusでサービスを即時操作できるsystemctl enable/disableでOS起動時の自動起動を設定するenable --nowで「今すぐ起動+自動起動設定」を1コマンドで済ませられる- カスタムアプリは
.serviceファイルを書けば systemd で管理できる
目次
- systemd とは
- 動作確認環境
- 基本コマンド(start / stop / restart / status)
- 自動起動の設定(enable / disable)
- サービス一覧を確認する
- サービスファイルの構造を理解する
- カスタムサービスを登録する
- よくあるエラーと解決策
- まとめ
systemd とは
systemd は Ubuntu を含む多くの Linux ディストリビューションで採用されている、OS 起動後の最初のプロセス(PID 1)です。サービスの起動・停止・自動起動設定を統合管理するほか、ログ管理(journald)やネットワーク管理(networkd)なども担います。
以前は SysV init や Upstart という仕組みが使われていましたが、現在の Ubuntu では systemd に完全に移行しています。そのため、/etc/init.d/ 配下のスクリプトを直接叩く古いやり方は非推奨です。
注意
本記事のコマンドは Ubuntu 24.04 LTS で検証しています。Ubuntu 20.04/22.04 でも基本的な操作は同じですが、systemd のバージョンが異なるため一部の出力形式が変わる場合があります。
動作確認環境
本記事の検証には Docker 公式イメージを使用しました。VPS や実機でも同様に操作できます。

Distributor ID: Ubuntu
Description: Ubuntu 24.04.4 LTS
Release: 24.04
Codename: noble
$ systemd –version | head -1
systemd 255 (255.4-1ubuntu8.16)
Ubuntu 24.04 LTS には systemd 255(パッケージ版: 255.4-1ubuntu8.16)が搭載されています。Ubuntu 22.04 LTS の systemd 249 からメジャーバージョンアップしており、cgroup v2 への完全移行や起動ログの改善が含まれます。

基本コマンド(start / stop / restart / status)
systemd でサービスを操作するメインのコマンドは systemctl(システムコントロール)です。基本的な操作はすべて sudo systemctl <動作> <サービス名> の形で行います。
手順1:サービスを起動する(start)
サービスをその場で起動するには start を使います。今回は nginx を例に説明します。nginx のインストール手順は「UbuntuにNginxをインストールしてWebサーバーを構築する手順」を参照してください。
start は成功しても何も出力されません(エラーなく終了すれば起動完了)。
手順2:サービスの状態を確認する(status)
起動できたか確認するには status を使います。

● nginx.service – A high performance web server and a reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: enabled)
Active: active (running) since Fri 2026-06-13 10:00:00 UTC; 3s ago
Docs: man:nginx(8)
Main PID: 1235 (nginx)
Tasks: 2 (limit: 1059)
CGroup: /system.slice/nginx.service
├─1235 nginx: master process /usr/sbin/nginx
└─1236 nginx: worker process
Active: active (running) と表示されていれば起動中です。inactive (dead) なら停止中、failed なら起動に失敗しています。
手順3:サービスを停止・再起動する(stop / restart)
$ sudo systemctl restart nginx
$ sudo systemctl reload nginx
restart は停止してから再起動します。設定ファイルを変更した後は reload が便利で、プロセスを落とさずに設定を再読み込みします(対応していないサービスでは restart を使います)。
| コマンド | 動作 | プロセスの継続 | 主な使いどき |
|---|---|---|---|
start |
起動 | 新規 | 停止中のサービスを起動する |
stop |
停止 | 終了 | サービスを一時停止する |
restart |
再起動 | 終了→再起動 | 設定変更後に確実に反映したい |
reload |
設定再読み込み | 継続 | サービスを止めずに設定を反映する |
status |
状態確認 | 変化なし | 動いているか確認する |
自動起動の設定(enable / disable)
VPS でサーバーを運用するなら、OS再起動後もサービスが自動で立ち上がるように設定する必要があります。それが enable です。
手順1:自動起動を有効にする(enable)

Synchronizing state of nginx.service with SysV service script…
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service
→ /usr/lib/systemd/system/nginx.service.
$ sudo systemctl is-enabled nginx
enabled
enable を実行すると、/etc/systemd/system/multi-user.target.wants/ にシンボリックリンクが作られます。これが「OS起動時にこのサービスを起動する」という指示になります。
enable と start の違い(ここは詰まりやすいポイント)
enable は「次回OS起動時から自動起動」を設定するだけで、今すぐは起動しません。今すぐ起動したい場合は start も別途実行するか、enable --now を使います。
手順2:今すぐ起動 + 自動起動設定を一発で(enable –now)
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service
→ /usr/lib/systemd/system/nginx.service.
正直これが一番よく使います。サービスをインストールしたら sudo systemctl enable --now <サービス名> と打つのを習慣にするといいです。
手順3:自動起動を無効にする(disable)
Removed /etc/systemd/system/multi-user.target.wants/nginx.service.
$ sudo systemctl is-enabled nginx
disabled
disable はシンボリックリンクを削除します。実行中のサービスはそのまま動き続けるので、今すぐ止めたい場合は stop も必要です。
サービス一覧を確認する
現在システムで管理されているサービスの一覧を確認するには list-units と list-unit-files を使います。
UNIT LOAD ACTIVE SUB DESCRIPTION
● nginx.service loaded active running A high performance web server…
ssh.service loaded active running OpenBSD Secure Shell server
systemd-journald.service loaded active running Journal Service
systemd-resolved.service loaded active running Network Name Resolution
$ systemctl list-unit-files –type=service | grep enabled
nginx.service enabled enabled
ssh.service enabled enabled
list-units は現在 実行中 のユニット一覧、list-unit-files は 自動起動設定状態 の一覧です。「enabled」なら自動起動ON、「disabled」ならOFF、「static」は自動起動非対応のサービスです。
サービスファイルの構造を理解する
systemd はサービスを .service ファイル(ユニットファイル)で管理します。nginx のファイルを実際に確認してみると、3つのセクションで構成されていることがわかります。

[Unit]
Description=A high performance web server and a reverse proxy server
Documentation=man:nginx(8)
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStart=/usr/sbin/nginx -g ‘daemon on; master_process on;’
ExecReload=/usr/sbin/nginx -g ‘daemon on; master_process on;’ -s reload
TimeoutStopSec=5
KillMode=mixed
[Install]
WantedBy=multi-user.target
このファイルは Ubuntu 24.04 の nginx 1.24.0(パッケージ: nginx_1.24.0-2ubuntu7.11)をインストールして Docker コンテナ内で実際に取得したものです。
| セクション | 役割 | 主なキー |
|---|---|---|
[Unit] |
サービスの説明・依存関係 | Description, After, Wants |
[Service] |
実行方法・起動コマンド | Type, ExecStart, Restart |
[Install] |
enable 時の設定 | WantedBy |
カスタムサービスを登録する
自作のスクリプトやアプリを systemd で管理したい場合は、/etc/systemd/system/ 配下に .service ファイルを作ります。Python の HTTP サーバーを例に説明します。
手順1:サービスファイルを作成する
以下の内容を記述します(今回は Docker コンテナ内で実際に作成して動作確認しています):
Description=My Sample Application
After=network.target
[Service]
Type=simple
User=www-data
WorkingDirectory=/var/www/myapp
ExecStart=/usr/bin/python3 -m http.server 8080
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
User=nobody は避ける
Docker コンテナ内で systemd-analyze verify を実行したところ、User=nobody に対して「Special user nobody configured, this is not safe!」という警告が出ました。本番環境では専用ユーザー(例: www-data や自作の myapp ユーザー)を使うことを推奨します。
手順2:デーモンをリロードして起動する
$ sudo systemctl enable –now myapp
Created symlink /etc/systemd/system/multi-user.target.wants/myapp.service
→ /etc/systemd/system/myapp.service.
$ sudo systemctl status myapp
Active: active (running) since …
daemon-reload は新規にサービスファイルを追加・編集した後に必ず実行する必要があります。 これを忘れると「Unit not found」エラーが出るので注意してください。
よくあるエラーと解決策
①「Unit nginx.service not found」
nginx がインストールされていないか、サービスファイルが存在しない場合に出ます。
$ sudo systemctl start nginx
②「Failed to start xxx.service: Unit not found」(カスタムサービス)
サービスファイルを新規作成後に daemon-reload を忘れた場合に発生します。
$ sudo systemctl start myapp
③「Active: failed」になる
起動に失敗した場合は journalctl でログを確認します。
Jun 13 10:00:00 vps nginx[1234]: nginx: [emerg] bind() to 0.0.0.0:80 failed
Jun 13 10:00:00 vps nginx[1234]: nginx: configuration file test failed
-u nginx でサービスを指定、-n 50 で最新50行を表示します。エラーメッセージからポートの競合や設定ミスがわかります。
④「Permission denied」で起動できない
サービスファイルの User= で指定したユーザーが存在しない、または実行ファイルのパーミッションが不足している場合に発生します。journalctl のログでパスを確認し、chmod +x か chown で修正します。
まとめ
Ubuntu のサービス管理をまとめます:
- 今すぐ起動するには
sudo systemctl start <サービス名> - OS再起動後の自動起動を設定するには
sudo systemctl enable <サービス名> - 今すぐ起動 + 自動起動設定を同時に行うには
sudo systemctl enable --now <サービス名> - 状態確認は
sudo systemctl status <サービス名>、ログはsudo journalctl -u <サービス名> - カスタムサービスは
/etc/systemd/system/に.serviceファイルを置き、daemon-reloadしてから起動 - Ubuntu 24.04 LTS には systemd 255 が搭載(Ubuntu 22.04 は systemd 249)
VPS でサーバーを動かすなら
- systemd でサービス管理できると、nginx・SSH・データベースを確実に自動起動できる
- Vultr・DigitalOcean・Linode などの海外 VPS は Ubuntu 24.04 LTS に対応しており、本記事の内容をそのまま使える
実際に VPS を借りてサーバーを運用したい方は、「VPS比較おすすめ7選 実測ベンチで選ぶ【2026年】」も参考にしてください。Vultr の $6/月プランから始められます。



コメント