ソケットアクティベーションサービス
オンデマンドサービス起動のためのsystemdソケットアクティベーションを実装します。ソケットユニットの仕組み、起動時間を改善する理由、Accept=による接続処理の設定方法について学びます。
Advanced Configurations
詳細な説明
ソケットアクティベーションによるオンデマンドサービス
ソケットアクティベーションはsystemdの最も強力な機能の一つです。起動時にサービスをすぐに開始する代わりに、systemdがリスニングソケットを開き、最初の接続が到着した時にのみサービスを起動します。
ソケットユニット
[Unit]
Description=My Application Socket
[Socket]
ListenStream=8080
Accept=no
[Install]
WantedBy=sockets.target
動作の仕組み
- 起動時、systemdがソケットを作成しポート8080でリッスン
- サービスプロセスは実行されていない — リソース使用量ゼロ
- クライアントがポート8080に接続
- systemdが接続を受け入れ、サービスを起動
- ソケットファイルディスクリプタがサービスプロセスに渡される
ソケットアクティベーションの利点
- 高速起動: サービスは必要な時にのみ起動し、起動時間を短縮
- ゼロダウンタイム更新: サービス再起動中もソケットは開いたまま
- オンデマンド起動: めったに使用されないサービスは必要になるまでリソースを消費しない
- ポート競合なし: systemdがソケット割り当てを管理
ユースケース
まれにしかトラフィックを受けないが、リクエストが到着した時に素早く応答する必要があるサービス(内部API、開発ツール、ゼロダウンタイム再起動が必要なサービスなど)を実行する場合に使用します。