Ubuntu でデーモンの複数のインスタンスを生成する

Ubuntu でデーモンの複数のインスタンスを生成する

Redis リスト上のデータを待機している間、リッスンしてブロックする Python スクリプトがあります。

次のようにして upstart で正常に実行されます。

description "stage message consumer"
author "Nilesh Ashra"

start on started mountall
stop on shutdown

respawn

exec sudo -u user REDIS_HOST=0.0.0.0 ENVIRONMENT=my_env /usr/bin/python /path/to/message_consumer.py

私の質問は、Upstart を使用してこれらを 12 個起動できるかどうかです。

そうでない場合、これを行う方法をお勧めいただけますか?

答え1

インタープリタ言語デーモンに取り組んでからしばらく経っているので、この点については間違っているかもしれませんが、これを行う「正しい」方法は、ポートをリッスンするようにプログラムを設計し、親が引き続き接続をリッスンしている間に、別のポートで一連のリクエスト/ジョブを処理するために別のプロセスをフォークすることだと思います。

このようなことを実行する方法を確認するには、シンプルな Web サーバーの作成方法に関するコード サンプルを探すとよいでしょう。Mailq が言うように、複数のプロセスで同時に同じ IP とポートのペアをリッスンすることはできません。

つまり、それぞれのジョブを実行する他のワークプロセスをフォークし、制御プロセスと同期し直します。

答え2

いいえ、できません。同じポートで複数回リッスンすることはできません。したがって、最初のインスタンスがすでにポート (たとえば 80) を占有している場合、他のインスタンスは同じポートでリッスンできません。

しかし、たとえ TCP/IP をリスニングするデーモンでなかったとしても、それは依然として奇妙な要件です。まったく同じことを実行するコマンドをなぜ複数回並行して開始するのでしょうか?

関連情報