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。

当我在没有工头的情况下直接从终端运行 bundle exec 命令时,该命令执行得很好。工头脚本有什么我遗漏的吗?

4

2 回答 2

2

显然,当运行背景=真时,resque 工作人员被守护,因此原始 pid 被删除,一个新的 pid 被作为工作人员的孤儿进程生成。

尽管如此,在使用工头创建 2 个后台工作人员时仍然存在问题,因为一旦其中一名工作人员被守护,工头将结束所有进程,并且只会创建一个守护工作人员而不是两个。

于 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 回答