用上帝来监控独angular兽 – 开始退出非零代码= 1

我正在上帝的脚本来监视我的独angular兽。 我开始使用GitHub的示例脚本,并且一直在修改它以匹配我的服务器configuration。 一旦上帝运行,像god stop unicorn命令god stop unicorngod restart unicorn工作就好了。

但是, god start unicorn结果是WARN: unicorn start command exited with non-zero code = 1 。 奇怪的是,如果我直接从configuration文件复制启动脚本,它就像一个全新的野马开始。

这是我的开始命令:

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

我已经声明所有的path在configuration文件中是绝对的。 任何想法可能会阻止此脚本工作?

我没有使用独angular兽作为应用程序服务器,但我曾经用神监控过。

如果我记得当你启动上帝,给你的configuration文件,它会自动启动任何你已经告诉它看。 独angular兽可能已经在运行,这就是为什么它会抛出错误。

一旦你开始上帝,请检查一下god status 。 如果不是这种情况,您可以在命令行上检查命令的退出状态:

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

该回显将打印最后一个命令的退出状态。 如果它是零,最后一个命令报告没有错误。 尝试连续两次启动独angular兽,我期望第二次它会返回1,因为它已经在运行。

编辑:

包括评论的实际解决scheme,因为这似乎是一个受欢迎的回应:

如果您的过程需要作为特定用户运行,您可以设置一个明确的用户和组。

 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用户破坏该应用程序。

但是这是唯一可以让复活或独angular兽与神同行的方法。 这是一个EC2实例,如果有帮助的人。

添加日志选项帮助我极大地debugging。

 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" 
Interesting Posts