2011-12-07 125 views
0

我有兩個紅寶石服務器腳本,powerupserver.rb和outputserver.rb,形式爲:如何使用Bluepill啓動並運行ruby服務器腳本?

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。我主要選擇了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,並檢查其狀態(須藤bluepill狀態),我看到:

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

所以它被認爲是(儘管pid爲0?這看起來不太好),但我可以看到他們沒有運行/做他們應該做的事情。具有Bluepill知識的人能幫我弄清楚我在這裏做錯了什麼嗎?提前謝謝你!

+0

我們使用bluepill。潛在問題:流程是否自動守護進程?啓動起來很慢嗎?例如,我們必須給獨角獸(+導軌)整整30秒才能啓動,否則Bluepill永遠不會獲得pid。 – d11wtq

回答

0

我最終使用守護程序ruby gem來守護我的腳本並使用Bluepill來監視它們。我知道你可以只使用Bluepill,但當時我無法弄清楚,我的系統一直工作得很好。我正在使用Rails 3.0.3,守護進程1.1.5和Bluepill 0.0.51。所以首先要確保你已經安裝了Daemons和Bluepill。

所以我們假設我們有myserver.rb,一個生活在我的Rails應用程序根目錄下的ruby服務器腳本。爲了與後臺程序的守護進程它的根文件夾中創建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時,您將擁有一個受監控的守護進程。確保以上示例中引用的所有文件夾都存在(例如,pid)。

相關問題