我在Apache + Passenger下运行Rails应用程序,并使用backgroundrb执行某些任务。当乘客开始时,有没有办法让backgroundrb启动?例如,在服务器重新启动后,我希望所有内容都能重新启动,无需手动干预即可启动backgroundrb或必须为其创建init脚本。
答案 0 :(得分:1)
您可以在Rails初始值设定项(config/initializers
)中进行调用。
仅在启动Passenger作业时才这样做,将呼叫包裹在类似......
的内容中if defined? PhusionPassenger
PhusionPassenger.on_event :starting_worker_process do |forked|
if forked
... spawn your backgroundrb here...
end
end
end
这种方法的问题在于,您最终会在每个乘客工作流程中产生一个新流程。您需要签入以查看backgroundrb是否已在运行。
看看ShogunPanda的评论here,了解我们如何使用Rufus Scheduler和PID文件。你应该可以做类似的事情。
答案 1 :(得分:0)
你可以考虑将它放在你的config / environment.rb文件中:
unless FileTest.exist?("#{RAILS_ROOT}/log/backgroundrb.pid")
fork do
exec("#{RAILS_ROOT}/script/backgroundrb", "run")
end
end
将/log/backgroundrb.pid更改为您的backgroundrb服务器使用的任何pid文件,您应该参加比赛......