0

次の形式の2つの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

開発では、フォアマンを使用してそれらを実行しますが、それはうまく機能します。現在、Bluepillを使用してデーモンとしてバックグラウンドで実行し、監視しようとしています。ForemanにはBluepill構成ファイル(.pillファイル)にエクスポートするオプションがあるため、Bluepillを選択しました。そこで、それを実行してから、必要に応じて.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、Daemons 1.1.5、および Bluepill 0.0.51 を使用しています。まず最初に、Daemons と Bluepill がインストールされていることを確認してください。

では、Rails アプリのルート内にある Ruby サーバー スクリプトである myserver.rb があるとします。デーモンでデーモン化するには、ルート フォルダー内に myserver_control.rb を作成して、デーモンにデーモン化の方法を指示します。

# 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)

オプション ハッシュの詳細については、デーモンのドキュメントを参照してください。コマンド ラインで「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 に答える