[英]Using God to monitor Unicorn - Start exited with non-zero code = 1
我正在制作一個神劇腳本來監視我的獨角獸。 我從GitHub的示例腳本開始,並一直在修改它以匹配我的服務器配置。 一旦上帝在奔跑,諸如god stop unicorn
命令會god stop unicorn
, god restart unicorn
工作就好了。
但是, 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
我已在配置文件中聲明所有路徑都是絕對路徑。 可能阻止此腳本工作的任何想法?
我沒有使用獨角獸作為應用程序服務器,但我之前使用過神進行監控。
如果我正確地記得你開始上帝並給你的配置文件,它會自動啟動你告訴它的任何東西。 Unicorn可能已經在運行,這就是它拋出錯誤的原因。
一旦你開始上帝,通過運行god status
檢查這一點。 如果不是這種情況,您可以在命令行上檢查命令的退出狀態:
/usr/local/bin/unicorn_rails -c /home/my-linux-user/my-rails-app/config/unicorn.rb -E production -D;
echo $?;
echo將打印最后一個命令的退出狀態。 如果它為零,則最后一個命令報告沒有錯誤。 嘗試連續兩次啟動獨角獸,我希望第二次它會返回1,因為它已經在運行了。
編輯:
包括評論的實際解決方案,因為這似乎是一個受歡迎的回應:
如果您的流程需要以特定用戶身份運行,則可以設置顯式用戶和組。
God.watch do |w|
w.uid = 'root'
w.gid = 'root'
# remainder of config
end
我的問題是我從未捆綁過根。 這是我做的:
sudo bash
cd RAILS_ROOT
bundle
你得到一個警告,告訴你永遠不要這樣做:
不要以root身份運行Bundler。 如果需要,Bundler可以請求sudo,並且以root身份安裝捆綁包將破壞此計算機上所有非root用戶的應用程序。
但這是我獲得resque或獨角獸與上帝奔跑的唯一方式。 這是在ec2實例上,如果它可以幫助任何人。
添加日志選項對我的調試幫助很大。
God.watch do |w|
w.log = "#{RAILS_ROOT}/log/god.log"
# remainder of config
end
最后,我的bug被證明是上帝的start_script
是在development
環境中執行的。 我通過將RAILS_ENV
附加到啟動腳本來修復此問題。
start_script = "RAILS_ENV=#{ENV['RACK_ENV']} bundle exec sidekiq -P #{pid_file} -C #{config_file} -L #{log_file} -d"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.