我有一个工头脚本在一个独立的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命令时,命令执行得很好。工头脚本有什么我想念的吗?
答案 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