【问题标题】:Resque worker foreman failing to start workersResque 工人领班未能启动工人
【发布时间】:2012-09-01 09:12:37
【问题描述】:

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

【问题讨论】:

    标签: ruby resque foreman


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-02
        • 1970-01-01
        • 2020-09-08
        相关资源
        最近更新 更多