1

スタンドアロンのrubyアプリで一部のワーカーを起動するフォアマンスクリプトがあります。これがスクリプトです

フォアマンスクリプト worker: bundle exec rake resque:work BACKGROUND=true QUEUE=image VERBOSE=true

スクリプトを実行すると、これが出力になります。

$ foreman start
22:00:38 worker.1 | started with pid 882
22:00:38 worker.1 | exited with code 0
22:00:38 system   | sending SIGTERM to all processes
SIGTERM received

プロセスは終了したようですが、ps -eaf | grep resqueログを見ると、pid 884で実行されているresqueワーカーが表示されます。これをテストしましたが、常に元のpid+2よりもpid+2です。

フォアマンなしでターミナルから直接bundleexecコマンドを実行すると、コマンドは正常に実行されます。フォアマンスクリプトに欠けているものはありますか?

4

2 に答える 2

2

したがって、明らかに、BACKGROUND = trueを実行すると、resqueワーカーがデーモン化されるため、元のpidが削除され、新しいpidがワーカーの孤立したプロセスとしてスパンされます。

それでも、フォアマンで2つのバックグラウンドワーカーを作成する場合は問題があります。これは、ワーカーの1つがデーモン化されると、フォアマンがすべてのプロセスを終了し、2つではなく1つのデーモン化されたワーカーのみが作成されるためです。

于 2012-09-10T19:20:03.130 に答える
0

フォアマンを使用してワーカーをデーモン化しないでください。フォアマンは、すべてのプロセスをフォアグラウンドで実行する必要があります。複数のワーカーが必要な場合は、次のようなものを使用してください。

image_worker: bundle exec rake resque:work QUEUE=image VERBOSE=true
other_worker: bundle exec rake resque:work QUEUE=other VERBOSE=true

同じキューで複数のワーカーを開始するには:

foreman start -m image_worker=2
于 2012-12-17T09:18:28.450 に答える