2010-10-06 67 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"