0

我有两个 ruby​​ 服务器脚本 powerupserver.rb 和 outputserver.rb,格式如下:

require '/Library/WebServer/sample_app/config/environment'
# more requires

@server = TCPServer.open(port_number)                          
loop do                                                 
  Thread.start(@server.accept) do |sock| 
    # do stuff
  end
end

在开发中,我使用 Foreman 来运行它们,效果很好。现在我正在尝试使用 Bluepill 作为守护进程在后台运行和监视它们。我选择 Bluepill 主要是因为 Foreman 可以选择导出到 Bluepill 配置文件(.pill 文件)。所以我这样做了,然后根据需要更改了 .pill 文件以获得以下内容:

Bluepill.application("sample_app", :foreground => false, :log_file => "/var/bluepill/log/bluepill.log") do |app|

  app.process("powerupserver") do |process|
    process.start_command = "ruby powerupserver.rb"
    process.working_dir = "/Library/WebServer/sample_app"
    process.pid_file = "/var/bluepill/pids/powerupserver-1.pid"
    process.daemonize = true
    process.stdout = process.stderr = "/var/bluepill/log/powerupserver-1.log"

    process.start_grace_time = 3.seconds
    process.stop_grace_time = 5.seconds
    process.restart_grace_time = 8.seconds
    process.stop_signals = [:quit, 30.seconds, :term, 5.seconds, :kill]

    process.checks :cpu_usage, :every => 10.seconds, :below => 5, :times => 3
    process.checks :mem_usage, :every => 10.seconds, :below => 100.megabytes, :times => [3,5]
    process.checks :flapping, :times => 2, :within => 30.seconds, :retry_in => 7.seconds

  end

  # more lines here mimicking above, but for server script 'outputserver.rb'
end

当我加载这个 .pill 并检查状态(sudo bluepill status)时,我看到:

$ sudo bluepill status
powerupserver(pid:0): up
outputserver(pid:0): up

所以它应该是向上的(尽管 pid 为 0?这当然看起来不太好),但我可以看到他们没有运行/做他们应该做的事情。有 Bluepill 知识的人可以帮我弄清楚我在这里做错了什么吗?非常感谢您提前!

4

1 回答 1

0

我最终使用 Daemons ruby​​ gem 来守护我的脚本并使用 Bluepill 来监控它们。我知道你可以只使用 Bluepill 来做这两个,但我当时想不通,而且我的系统工作得很好。我正在使用 Rails 3.0.3、守护进程 1.1.5 和 Bluepill 0.0.51。所以首先,确保你安装了守护进程和 Bluepill。

因此,假设我们有 myserver.rb,这是一个 ruby​​ 服务器脚本,位于我的 rails 应用程序根目录中。为了使用 Daemons 对其进行守护,在根文件夹中创建 myserver_control.rb 以告诉 Daemons 如何进行守护:

# myserver_control.rb
require 'rubygems'
require 'daemons'

@options = {
    :dir_mode => :normal,
    :dir => '/Library/WebServer/myrailsapp/pids',
    :multiple => true,
    :backtrace => true,
    :monitor => false,
    :log_dir => '/Library/WebServer/myrailsapp/log',
    :log_output => true
}

Daemons.run('myserver.rb', @options)

查看 Daemon 文档以了解有关选项哈希的更多信息。您现在可以使用“sudo ruby​​ myserver_control.rb start”在命令行的 Rails 应用程序根文件夹中运行守护程序。这是守护程序启动命令,您可以将其放入 Bluepill 配置文件(myrailsapp.pill 文件)中,如下所示:

Bluepill.application("myrailsapp", :foreground => false, :log_file => "/Library/WebServer/myrailsapp/log/bluepill.log") do |app|

  app.process("myserver") do |process|

    process.start_command = "sudo ruby myserver_control.rb start"
    process.stop_command = "sudo ruby myserver_control.rb stop"
    process.restart_command = "sudo ruby myserver_control.rb restart"

    process.pid_file = "/Library/WebServer/myrailsapp/pids/myserver.rb0.pid"

    process.working_dir = "/Library/WebServer/myrailsapp"

    process.start_grace_time = 5.seconds
    process.stop_grace_time = 5.seconds
    process.restart_grace_time = 8.seconds

  end
end

一定要阅读 Bluepill 文档以查看您的所有选项。然后,当您启动 Bluepill 时,您就有了一个受监控的守护进程。确保以上示例中引用的所有文件夹都存在(例如 pids)。

于 2012-09-24T23:47:30.940 回答