2012-07-16 68 views
1

我目前正在嘗試使用上帝監視總共三個Rails /機架應用程序的各種進程/守護進程。監控效果很好,問題是我無法配置上帝在重啓後自動啓動所有進程。使用上帝與多個應用程序,並在重新啓動後自動啓動它

我的設置:我在Centos上運行Linux VPS & Plesk。 我有一個非root用戶「deployer」,用於部署&運行三個Rails/Rack應用程序。兩個應用程序與乘客apache模塊一起運行,第三個應用程序使用瘦服務器(這是必要的,因爲應用程序不能與apache協同工作)。正在使用乘客的兩個Rails應用程序有額外的rake任務在後臺運行 - 這些和瘦服務器都由上帝監控。

神寶石在所有三個應用程序的Gem文件中指定。

在每deploy.rb文件我有一個看起來像

namespace :misc do 
    desc "restart woekers using gog; restart webserver" 
    task :restart, roles: [:web, :resque] do 
     run "touch #{current_path}/tmp/restart.txt" 
     god.all.start 
     god.all.reload 
     god.all.terminate 
     god.all.start 
    end 
end 

服務器重新啓動後的方法,如果我跑帽其他:所有三個應用程序手動重啓,所有的進程都啓動了並正確監控。

每次嘗試在啓動時自動啓動上帝,並開始所有必要的過程失敗。 我嘗試了很多不同的東西,但沒有任何工作。我的方法,到目前爲止是創建與@reboot一個cron任務運行三個以下腳本:

#!/bin/bash -l 

cd /path/to/app/ && bundle exec god -c /path/to/app/config/god/resque.god && bundle exec god load /path/to/app/config/god/resque.god && bundle exec god start resque 

此應用爲先的偉大工程:上帝和所有的進程已經啓動。 當爲第二個應用程序執行腳本時(當然使用正確的路徑),god不能啓動任務。 我啓用了登錄上帝和錯誤消息(在機架應用程序的情況下)「瘦:命令未找到」。 當我首先啓動機架應用程序時,瘦啓動正確,並找不到其他任務的命令。

我不明白我的配置有什麼問題。我在上面的代碼中添加了bundle exec命令,因爲你可以在上面看到這些命令(所以這些命令應該在它們各自的應用程序的環境中執行) - 不過,它只是沒有用。

我真的很感激,如果有人可以幫助我讓上帝自動啓動。

如果您需要更多信息,請不要猶豫,問問!

先謝謝了!

回答

4

我的工作類似的東西,採取這種方式:

使用暴發戶或類似發動神守護進程在系統啓動時,對我來說這個事情做,像這樣:

的/ etc /初始化/神。CONF

description "god" 

start on runlevel [2] 
stop on runlevel [016] 

console owner 

exec /usr/local/rvm/bin/rvm_god -c /etc/god 

respawn 

那傢伙跑神指定-c選項一個紅寶石上帝配置文件:

的/ etc /神

# Load the configs 

God.load "/home/dangerousbeans/kitten_smusher/config/config.god" 
God.load "/home/dangerousbeans/irc_nommer/config/config.god" 

這紅寶石花花公子負載在個人應用程序上帝配置並運行God.load會導致它們啓動。

的各個文件看起來像這樣我想爲我使用RVM: /home/dangerousbeans/irc_nommer/config/config.god

God.watch do |w| 
    w.dir = "/home/dangerousbeans/irc_nommer" 
    w.name = "IRCnommer" 

    # scary rvm magic begins 
    gemsets_path = [ 
     "/home/dangerousbeans/.rvm/gems/[email protected]_nommer/bin", 
     "/home/dangerousbeans/.rvm/rubies/ruby-1.9.3-p125/bin", 
    "/home/dangerousbeans/.rvm/bin", 
     ENV['PATH'] # inherit this 
    ].join(':') 

    w.env  = { 
    "PATH"  => gemsets_path, 
     "GEM_PATH" => "/home/dangerousbeans/.rvm/gems/[email protected]_nommer" 
    } 
    # scary rvm magic ends 

    w.log = "/tmp/ircnommer.log" 

    w.start = "ruby /home/dangerousbeans/irc_nommer/irc_nommer.rb" 
    w.keepalive 
end 
0

的關鍵點是環境之間的不同手動和自動,而上帝執行[開始]命令。 因此,您可以將命令env添加到命令中。像:

God.watch do |w| 
    w.start = "cd #{your_app_directory}; env >> log/god.log; your-real-command >> log/god.log 2>&1" 
end 

,你在同一個目錄中輸入env將會有一定的差異。 檢查差異並將必需/正確的段落添加到上帝的環境中。

今天我遇到一個問題,我在1臺服務器上部署了2個rails應用,都使用god。 App#2無法正確啓動該命令。做完上面的測試後,我發現原因:上帝持有指向應用程序#1的環境變量[BUNDLE_GEMFILE]。因此,我添加一條簡單的線,然後錯誤消失:

God.watch do |w| 
    w.env = { 
    "BUNDLE_GEMFILE" => "#{$rails_root}/Gemfile" 
    } 
end 
相關問題