foremanで起動するプロセスを確実に看取りたい
最近コミットしているプロジェクトでforemanを使っています。(下記のようなProcfileをしています。)
でも問題があって、ローカル環境でCtrl+c
を入力してforemanプロセスを停止すると、
10個起動しているresqueのうちいくつかが終了せずに残り続ける、ということがしばしば発生しており、そのたびに pkill resque
を実行していました。
とにかくめんどくさい。
web: bundle exec rails server
resque-scheduler: resque-scheduler --interval 0.3 --initializer-path lib/resque_scheduler.rb
resque: bundle exec rake resque:workers TERM_CHILD=true COUNT=10 QUEUE=normal
実はこのProcfileにあるresque起動コマンドには問題があって、
foremanが起動したプロセスに関しては看取ってくれるんですが、resqueの起動コマンドで生成する10プロセスにはforemanは関与しません。だからプロセスが残ってしまったのではないかと。
したがって、下記のようにすればresqueプロセスが残ることはなくなります。
web: bundle exec rails server
resque-scheduler: resque-scheduler --interval 0.3 --initializer-path lib/resque_scheduler.rb
resque: env TERM_CHILD=1 QUEUE=normal bundle exec rake resque:work
resque: env TERM_CHILD=1 QUEUE=normal bundle exec rake resque:work
resque: env TERM_CHILD=1 QUEUE=normal bundle exec rake resque:work
resque: env TERM_CHILD=1 QUEUE=normal bundle exec rake resque:work
resque: env TERM_CHILD=1 QUEUE=normal bundle exec rake resque:work
resque: env TERM_CHILD=1 QUEUE=normal bundle exec rake resque:work
resque: env TERM_CHILD=1 QUEUE=normal bundle exec rake resque:work
resque: env TERM_CHILD=1 QUEUE=normal bundle exec rake resque:work
resque: env TERM_CHILD=1 QUEUE=normal bundle exec rake resque:work
resque: env TERM_CHILD=1 QUEUE=normal bundle exec rake resque:work
ちなみに、rake resque:workers COUNT=10
で起動するとCoWが効いて実行コストが安くなっているのでは?と思ってソースを確認しましたが、COUNTの数だけ rake resque:work
を実行しているだけでした。
-
category:
- ruby tags: