6

我正在使用 BluePill 来管理流程,例如 Rails 的延迟作业。在 BluePill 日志中,我收到以下消息:

W, [2010-09-27T01:23:20.447053 #19441]  WARN -- : [fsg_distro:delayed_job] pid_file /srv/fsg_distro/shared/pids/delayed_job.pid does not exist or cannot be read
W, [2010-09-27T01:23:20.447368 #19441]  WARN -- : [fsg_distro:delayed_job] Executing start command: ruby script/delayed_job -e production start
I, [2010-09-27T01:23:20.469165 #19441]  INFO -- : [fsg_distro:delayed_job] Going from down => starting

所以它声称缺少一个 pid 文件,确实如此,但是当 BluePill 启动延迟作业进程时不应该创建该 pid 吗?

更新 为了更清楚地了解这个错误,我可以手动成功运行命令,但 Bluepill 无法运行启动命令。当我手动运行它时,它看起来像这样:

rails@george:/srv/fsg_distro/current$ /usr/bin/env RAILS_ENV=production /usr/bin/ruby /srv/fsg_distro/current/script/delayed_job start
delayed_job: process with pid 17564 started. 

当我使用 Bluepill 运行它时,它看起来像这样:

W, [2010-10-03T21:24:13.943136 #17326]  WARN -- : [fsg_distro:delayed_job] pid_file /srv/fsg_distro/shared/pids/delayed_job.pid does not exist or cannot be read
W, [2010-10-03T21:24:13.943391 #17326]  WARN -- : [fsg_distro:delayed_job] pid_file /srv/fsg_distro/shared/pids/delayed_job.pid does not exist or cannot be read
I, [2010-10-03T21:24:13.943811 #17326]  INFO -- : [fsg_distro:delayed_job] Going from starting => down
W, [2010-10-03T21:24:14.945274 #17326]  WARN -- : [fsg_distro:delayed_job] pid_file /srv/fsg_distro/shared/pids/delayed_job.pid does not exist or cannot be read
W, [2010-10-03T21:24:14.945495 #17326]  WARN -- : [fsg_distro:delayed_job] pid_file /srv/fsg_distro/shared/pids/delayed_job.pid does not exist or cannot be read
W, [2010-10-03T21:24:14.945826 #17326]  WARN -- : [fsg_distro:delayed_job] Executing start command: /usr/bin/env RAILS_ENV=production /usr/bin/ruby /srv/fsg_distro/current/script/delayed_job start
W, [2010-10-03T21:24:15.049261 #17326]  WARN -- : [fsg_distro:delayed_job] Start command execution returned non-zero exit code:
W, [2010-10-03T21:24:15.049491 #17326]  WARN -- : [fsg_distro:delayed_job] {:stderr=>"", :exit_code=>1, :stdout=>""} 
I, [2010-10-03T21:24:15.049947 #17326]  INFO -- : [fsg_distro:delayed_job] Going from down => starting 

我的药丸看起来像这样:

APP_ROOT='/srv/fsg_distro'
RAILS_ROOT='/srv/fsg_distro/current'
RAILS_ENV='production'
RUBY_EXEC='/usr/bin/ruby'

Bluepill.application("fsg_distro", :log_file => "/srv/fsg_distro/shared/log/bluepill.log") do |app|
  app.process("delayed_job") do |process|
    process.working_dir = RAILS_ROOT

    process.start_grace_time    = 30.seconds
    process.stop_grace_time     = 30.seconds
    process.restart_grace_time  = 30.seconds

    process.start_command = "/usr/bin/env RAILS_ENV=#{RAILS_ENV} #{RUBY_EXEC} #{RAILS_ROOT}/script/delayed_job start"
    process.stop_command  = "/usr/bin/env RAILS_ENV=#{RAILS_ENV} #{RUBY_EXEC} #{RAILS_ROOT}/script/delayed_job stop"

    process.pid_file = "#{APP_ROOT}/shared/pids/delayed_job.pid"
    process.uid = "deploy"
    process.gid = "deploy"
  end
end 

我的延迟作业脚本如下所示:

#!/usr/bin/env ruby
ENV['RAILS_ENV'] ||= 'production'

require File.dirname(__FILE__) + '/../config/environment'
require 'delayed/command'
Delayed::Command.new(ARGV).daemonize 
4

2 回答 2

2

如果您将delayed_job (您是)守护进程,那么您必须自己为其生成一个pid 文件,或者让delayed_job 为您执行此操作,那么bluepill 期望在grace_start_time通过后找到该pid 文件。

如果您在前台运行delayed_job,并告诉bluepill 为您守护进程,那么bluepill 将生成pid 文件。

您不能既监视自我守护进程又让 bluepill 创建 pid 文件。它是一个或另一个。

于 2011-09-16T11:48:39.103 回答
1

我没有答案,但完全相同的问题。我已经尝试了很多很多解决方案——包括为 init.d 创建一个启动脚本并从 bluepill 调用它,如另一个基于监视器的帖子 (http://stackoverflow.com/questions/1226302/how-to-monitor- delay-job-with-monit),但没有任何效果。PID 文件总是存在权限问题。以 su 身份运行时怎么会出现这种情况?

我拥有代码,并与组 www 分享。我是否需要创建自定义用户才能运行 bluepill?如果是这样,用什么设置?

于 2010-10-25T04:08:55.463 回答