簡體   English   中英

使用上帝監視Unicorn - 以非零代碼= 1開始退出

[英]Using God to monitor Unicorn - Start exited with non-zero code = 1

我正在制作一個神劇腳本來監視我的獨角獸。 我從GitHub的示例腳本開始,並一直在修改它以匹配我的服務器配置。 一旦上帝在奔跑,諸如god stop unicorn命令會god stop unicorngod 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM