シンプルなWebサーバーサービス
シンプルなWebサーバープロセスのためのsystemdサービスユニットファイルを作成します。simpleサービスタイプ、基本的な依存関係、systemdがフォアグラウンドプロセスを管理する方法について学びます。
Simple Services
詳細な説明
systemdでWebサーバーを実行する
最も一般的なsystemdサービスタイプはsimpleです。Type=simpleを設定すると、systemdはExecStartプロセスが起動した時点でサービスが開始されたと見なします。プロセスはフォアグラウンドに留まる必要があり、fork()やデーモン化を行ってはいけません。
[Unit]
Description=My Web Server
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/my-webserver --port 8080
Restart=on-failure
RestartSec=5
User=www-data
Group=www-data
[Install]
WantedBy=multi-user.target
主要ディレクティブの解説
After=network.target: サービス開始前にネットワークスタックが初期化されることを保証します。ハード依存関係は作成しません — そのためにはRequires=を使用します。Type=simple: デフォルトのタイプ。ExecStartで起動されるプロセスがメインサービスプロセスです。systemdはそのPIDを追跡し、直接監視します。Restart=on-failure: プロセスが非ゼロの終了コードで終了した場合、またはシグナルで終了された場合に自動的に再起動します(コード0の正常終了は除く)。RestartSec=5: システムを圧迫する高速な再起動ループを防ぐため、再起動の試行間に5秒待機します。User=www-data: 最小権限の原則に従い、www-dataユーザーとしてプロセスを実行します。
Simpleタイプを使用する場面
アプリケーションが以下の条件を満たす場合にType=simpleを使用します:
- フォアグラウンドで実行し、forkしない
- 起動後すぐに接続を受け付ける準備ができる
- 最新のアプリケーション(Goバイナリ、Node.js、フォアグラウンドモードのPython with Gunicorn)
サービスのライフサイクル
systemctl start mywebserver→ systemdがExecStartを実行- プロセスがフォアグラウンドに留まる → systemdがPIDを追跡
- プロセスがクラッシュ → systemdが終了を検出し、RestartSec待機後に再起動
systemctl stop mywebserver→ systemdがSIGTERMを送信、TimeoutStopSec待機後にSIGKILL
ユースケース
フォアグラウンドで実行し、障害時の自動再起動と適切なユーザー分離が必要な軽量Webサーバー(Go HTTPサーバーや静的ファイルサーバーなど)をデプロイする場合に使用します。