使用上帝监视Unicorn - 以非零代码= 1开始退出

时间:2010-10-06 21:51:46

标签: ruby-on-rails ruby linux unicorn god

我正在制作一个神剧脚本来监视我的独角兽。我从GitHub的示例脚本开始,并一直在修改它以匹配我的服务器配置。一旦上帝运行,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

我已在配置文件中将所有路径声明为绝对路径。什么可能阻止这个脚本工作的想法?

3 个答案:

答案 0 :(得分:14)

我没有使用独角兽作为app服务器,但我之前使用过god进行监控。

如果我在你开始上帝的时候正确地记得并给你的配置文件,它会自动启动你告诉它的任何东西。 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

答案 1 :(得分:0)

我的问题是我从未捆绑过根。这是我做的:

sudo bash
cd RAILS_ROOT
bundle

您收到警告,告诉您永远不要这样做:

  

不要以root身份运行Bundler。如果需要,Bundler可以要求sudo,   并以root身份安装捆绑包将破坏所有人的应用程序   这台机器上的非root用户。

但这是我唯一能让resque或独角兽与上帝同行的方式。这是在ec2实例上,如果它可以帮助任何人。

答案 2 :(得分: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"