Resque工人工头未能启动工人

时间:2012-09-07 13:17:45

标签: ruby resque foreman

我有一个工头脚本在一个独立的ruby应用程序上启动一些工作人员。这是脚本

Foreman脚本 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工作程序。我已经测试了这个并且它总是比原始的p2 +。

当我直接从没有工头的终端运行bundle exec命令时,命令执行得很好。工头脚本有什么我想念的吗?

2 个答案:

答案 0 :(得分:2)

显然,当运行BACKGROUND = true时,resque worker会被守护进程,因此原始pid会被删除,而新的pid会被作为工作人员的孤立进程进行跨越。

然而,在使用工头创建2个后台工作程序时会出现问题,因为一旦其中一个工作程序被守护,foreman将结束所有进程,并且只创建一个守护进程的worker而不是两个。

答案 1 :(得分:0)

你不应该用工头守护工人 - 工头需要让所有进程都在前台运行。如果你想要多个工人,只需使用这样的东西:

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

在同一队列中启动多个worker:

foreman start -m image_worker=2