Supervisor は Unix 系ホスト向けのプロセス制御システムです。設定されたプログラムを起動し、その出力を取得し、適切な場合に再起動し、制御インターフェイスを公開します。アプリケーションに軽量で明示的なプロセスマネージャーが必要な場合に適していますが、オペレーティングシステムの init システムやサービスマネージャーの代替ではありません。
プログラムを定義する #
最小限のプログラム定義は、Supervisor のインクルード設定ディレクトリに置きます。
[program:worker]
command=/opt/app/bin/worker --queue=default
directory=/opt/app
user=app
autostart=true
autorestart=unexpected
startsecs=5
stopasgroup=true
killasgroup=true
stdout_logfile=/var/log/app/worker.log
stderr_logfile=/var/log/app/worker-error.logstartsecs は、すぐに終了するプロセスが正常に起動したと報告されるのを防ぎます。stopasgroup と killasgroup は、再起動時に子プロセスが終了シグナルを受け取るようにします。サービスは権限のないユーザーとして実行し、必要なファイルシステムアクセスだけを付与してください。
設定を適用して検査する #
設定を変更した後は、意図的に再読み込みします。
supervisorctl reread
supervisorctl update
supervisorctl status
supervisorctl tail -f worker stderrreread は設定変更を検出し、update は影響を受けるプログラムを追加、削除、または再起動します。意図的に再起動する場合は supervisorctl restart worker を使用し、リトライ回数を増やす前にログを確認してください。
コンテナーとサービスマネージャー #
単一プロセスのコンテナーでは、アプリケーションを PID 1 として直接実行し、再起動はオーケストレーターに任せます。1 つのプロセスを実行するだけのために Supervisor を追加すると、シグナルと終了ステータスが分かりにくくなります。従来型のホストでは、依存関係の処理、cgroup 統合、ログ記録が要件を満たす場合、systemd などのプラットフォームサービスマネージャーを優先してください。単純なプログラムモデルが運用上の境界として明確に適している場合に Supervisor を使用します。
コメント
GitHub で閲覧・コメントする(投稿にはログインが必要です)