Ubuntuのsystemdでサービスを管理する方法【start/stop/enable】

システム管理

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 で管理できる

目次

  1. systemd とは
  2. 動作確認環境
  3. 基本コマンド(start / stop / restart / status)
  4. 自動起動の設定(enable / disable)
  5. サービス一覧を確認する
  6. サービスファイルの構造を理解する
  7. カスタムサービスを登録する
  8. よくあるエラーと解決策
  9. まとめ

systemd とは

systemd は Ubuntu を含む多くの Linux ディストリビューションで採用されている、OS 起動後の最初のプロセス(PID 1)です。サービスの起動・停止・自動起動設定を統合管理するほか、ログ管理(journald)やネットワーク管理(networkd)なども担います。

以前は SysV initUpstart という仕組みが使われていましたが、現在の Ubuntu では systemd に完全に移行しています。そのため、/etc/init.d/ 配下のスクリプトを直接叩く古いやり方は非推奨です。

注意

本記事のコマンドは Ubuntu 24.04 LTS で検証しています。Ubuntu 20.04/22.04 でも基本的な操作は同じですが、systemd のバージョンが異なるため一部の出力形式が変わる場合があります。

動作確認環境

本記事の検証には Docker 公式イメージを使用しました。VPS や実機でも同様に操作できます。

Ubuntu 24.04 での systemd バージョン確認(実測)
Ubuntu 24.04 での systemd バージョン確認(実測)



ubuntu@linuxlab: ~
$ lsb_release -a
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 への完全移行や起動ログの改善が含まれます。

Ubuntu バージョン別 systemd 対応表(実測)
Ubuntu バージョン別 systemd 対応表(実測)

基本コマンド(start / stop / restart / status)

systemd でサービスを操作するメインのコマンドは systemctl(システムコントロール)です。基本的な操作はすべて sudo systemctl <動作> <サービス名> の形で行います。

手順1:サービスを起動する(start)

サービスをその場で起動するには start を使います。今回は nginx を例に説明します。nginx のインストール手順は「UbuntuにNginxをインストールしてWebサーバーを構築する手順」を参照してください。




ubuntu@vps: ~
$ sudo systemctl start nginx

start は成功しても何も出力されません(エラーなく終了すれば起動完了)。

手順2:サービスの状態を確認する(status)

起動できたか確認するには status を使います。

systemctl start / stop / status の実行例(VPS環境)
systemctl start / stop / status の実行例(VPS環境)



ubuntu@vps: ~
$ sudo systemctl status nginx
● 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 なら起動に失敗しています。

著者アイコン
著者アイコン

status の出力でよく見るのが「Active: active (running)」と「Active: inactive (dead)」の2つ。色付きで表示されるので、緑が running、白か灰色が dead と覚えると直感的です。

手順3:サービスを停止・再起動する(stop / restart)




ubuntu@vps: ~
$ sudo systemctl stop nginx
$ sudo systemctl restart nginx
$ sudo systemctl reload nginx

restart は停止してから再起動します。設定ファイルを変更した後は reload が便利で、プロセスを落とさずに設定を再読み込みします(対応していないサービスでは restart を使います)。

コマンド 動作 プロセスの継続 主な使いどき
start 起動 新規 停止中のサービスを起動する
stop 停止 終了 サービスを一時停止する
restart 再起動 終了→再起動 設定変更後に確実に反映したい
reload 設定再読み込み 継続 サービスを止めずに設定を反映する
status 状態確認 変化なし 動いているか確認する

自動起動の設定(enable / disable)

VPS でサーバーを運用するなら、OS再起動後もサービスが自動で立ち上がるように設定する必要があります。それが enable です。

手順1:自動起動を有効にする(enable)

systemctl enable / disable コマンドの実行例(VPS環境)
systemctl enable / disable コマンドの実行例(VPS環境)



ubuntu@vps: ~
$ sudo systemctl enable nginx
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)




ubuntu@vps: ~
$ sudo systemctl enable –now nginx
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service
→ /usr/lib/systemd/system/nginx.service.

正直これが一番よく使います。サービスをインストールしたら sudo systemctl enable --now <サービス名> と打つのを習慣にするといいです。

手順3:自動起動を無効にする(disable)




ubuntu@vps: ~
$ sudo systemctl disable nginx
Removed /etc/systemd/system/multi-user.target.wants/nginx.service.
$ sudo systemctl is-enabled nginx
disabled

disable はシンボリックリンクを削除します。実行中のサービスはそのまま動き続けるので、今すぐ止めたい場合は stop も必要です。

サービス一覧を確認する

現在システムで管理されているサービスの一覧を確認するには list-unitslist-unit-files を使います。




ubuntu@vps: ~
$ systemctl list-units –type=service
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つのセクションで構成されていることがわかります。

nginx.service ユニットファイルの内容(実測)
nginx.service ユニットファイルの内容(実測)



ubuntu@linuxlab: ~
$ cat /usr/lib/systemd/system/nginx.service
[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:サービスファイルを作成する




ubuntu@vps: ~
$ sudo nano /etc/systemd/system/myapp.service

以下の内容を記述します(今回は Docker コンテナ内で実際に作成して動作確認しています):




ubuntu@vps: /etc/systemd/system/myapp.service
[Unit]
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:デーモンをリロードして起動する




ubuntu@vps: ~
$ sudo systemctl daemon-reload
$ 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 がインストールされていないか、サービスファイルが存在しない場合に出ます。




ubuntu@vps: ~
$ sudo apt update && sudo apt install -y nginx
$ sudo systemctl start nginx

②「Failed to start xxx.service: Unit not found」(カスタムサービス)

サービスファイルを新規作成後に daemon-reload を忘れた場合に発生します。




ubuntu@vps: ~
$ sudo systemctl daemon-reload
$ sudo systemctl start myapp

③「Active: failed」になる

起動に失敗した場合は journalctl でログを確認します。




ubuntu@vps: ~
$ sudo journalctl -u nginx -n 50 –no-pager
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 +xchown で修正します。

まとめ

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/月プランから始められます。

コメント

タイトルとURLをコピーしました