2010-10-06 64 views
42

我在神腳本工作監控我的獨角獸。我開始使用GitHub的示例腳本,並且一直在修改它以匹配我的服務器配置。一旦上帝運行,命令如god stop unicorngod restart unicorn工作得很好。使用神監測獨角獸 - 開始退出,非零代碼= 1

然而,god start unicorn結果WARN: unicorn start command exited with non-zero code = 1。奇怪的部分是,如果我直接從配置文件複製啓動腳本,它就像一個全新的野馬一樣開始。

這是我的啓動命令:

/usr/local/bin/unicorn_rails -c /home/my-linux-user/my-rails-app/config/unicorn.rb -E production -D 

我已經聲明的所有路徑,在配置文件中絕對的。任何想法可能會阻止這個腳本工作?

回答

14

我沒有用麒麟作爲應用服務器,但我用神監測之前。

如果我沒有記錯的話,當你開始的神,讓您的配置文件,它會自動啓動不管你告訴它來觀看。獨角獸可能已經在運行,這就是爲什麼它會拋出錯誤。通過運行god status一旦你開始了神

檢查。如果不是這種情況,你可以在命令行上檢查COMAND的退出狀態是什麼:

/usr/local/bin/unicorn_rails -c /home/my-linux-user/my-rails-app/config/unicorn.rb -E production -D; echo $?;

呼應將打印的最後一個命令的退出狀態。如果它爲零,則最後一個命令報告沒有錯誤。嘗試連續兩次啓動獨角獸,我預計第二次它會返回1,因爲它已經在運行。

編輯:

包括註釋實際的解決方案,因爲這似乎是一個流行的響應:

如果你的過程需要您可以設置明確的用戶和組來運行特定的用戶。

God.watch do |w| 
    w.uid = 'root' 
    w.gid = 'root' 

    # remainder of config 
end 
+0

有趣...這是一個非常好的建議。我在外面執行時使用回聲添加來讀取啓動和停止命令的輸出。他們都以「0」的值退出。但是,當相同的命令由上帝執行時,它將以'1'值退出。所有的過程都應該以根源開始......神和獨角獸。我想知道這裏是否有一個總體權限錯誤。這似乎是一個合理的答案? – mindtonic 2010-10-07 14:45:10

+1

耶聽起來像上帝雖然是作爲根運行,它可能是作爲另一個用戶執行命令?看起來像你可以設置用戶上帝運行的命令爲: God.watch do | w | ... w.uid ='root' w.gid ='root' ... end – Jeremy 2010-10-07 20:27:52

0

我的問題是,我從來沒有作爲根捆綁。下面是我做的:

sudo bash 
cd RAILS_ROOT 
bundle 

你得到一個警告信息,告訴你從來沒有做到這一點:

不要運行捆紮機爲根。 Bundler可以詢問sudo是否需要, 並且以root用戶身份安裝捆綁軟件將在此機器上爲所有 非root用戶破壞此應用程序。

但這是我唯一能夠得到復古或獨角獸與神一同運行的方法。如果這有助於任何人,這是在ec2實例上。

0

添加日誌選項在調試極大地幫助了我。

God.watch do |w| 
    w.log = "#{RAILS_ROOT}/log/god.log" 

    # remainder of config 
end 

最終,我的錯誤竟然是在神start_scriptdevelopment環境下執行。我通過將RAILS_ENV附加到啓動腳本來解決此問題。

start_script = "RAILS_ENV=#{ENV['RACK_ENV']} bundle exec sidekiq -P #{pid_file} -C#{config_file} -L #{log_file} -d"