用上帝来监控独angular兽 – 开始退出非零代码= 1
我正在上帝的脚本来监视我的独angular兽。 我开始使用GitHub的示例脚本,并且一直在修改它以匹配我的服务器configuration。 一旦上帝运行,像god stop unicorn
命令god stop unicorn
和god 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_script
在development
环境中执行的。 我通过将RAILS_ENV
附加到启动脚本来解决这个问题。
start_script = "RAILS_ENV=#{ENV['RACK_ENV']} bundle exec sidekiq -P #{pid_file} -C #{config_file} -L #{log_file} -d"