ソケットアクティベーションサービス

オンデマンドサービス起動のためのsystemdソケットアクティベーションを実装します。ソケットユニットの仕組み、起動時間を改善する理由、Accept=による接続処理の設定方法について学びます。

Advanced Configurations

詳細な説明

ソケットアクティベーションによるオンデマンドサービス

ソケットアクティベーションはsystemdの最も強力な機能の一つです。起動時にサービスをすぐに開始する代わりに、systemdがリスニングソケットを開き、最初の接続が到着した時にのみサービスを起動します。

ソケットユニット

[Unit]
Description=My Application Socket

[Socket]
ListenStream=8080
Accept=no

[Install]
WantedBy=sockets.target

動作の仕組み

  1. 起動時、systemdがソケットを作成しポート8080でリッスン
  2. サービスプロセスは実行されていない — リソース使用量ゼロ
  3. クライアントがポート8080に接続
  4. systemdが接続を受け入れ、サービスを起動
  5. ソケットファイルディスクリプタがサービスプロセスに渡される

ソケットアクティベーションの利点

  1. 高速起動: サービスは必要な時にのみ起動し、起動時間を短縮
  2. ゼロダウンタイム更新: サービス再起動中もソケットは開いたまま
  3. オンデマンド起動: めったに使用されないサービスは必要になるまでリソースを消費しない
  4. ポート競合なし: systemdがソケット割り当てを管理

ユースケース

まれにしかトラフィックを受けないが、リクエストが到着した時に素早く応答する必要があるサービス(内部API、開発ツール、ゼロダウンタイム再起動が必要なサービスなど)を実行する場合に使用します。

試してみる — Systemd Unit File Generator

フルツールを開く