利用上帝监视独角兽 - 以非零代码= 1开始退出
-
28-09-2019 - |
题
我正在制作神剧本来监视我的独角兽。我从GitHub的示例脚本开始,一直在修改它以匹配我的服务器配置。一旦上帝奔跑, god stop unicorn
和 god 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
一旦你开始上帝。如果不是这种情况,您可以检查命令行,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
其他提示
我的问题是我从不捆绑成根。这是我所做的:
sudo bash
cd RAILS_ROOT
bundle
您会得到警告,告诉您永远不要这样做:
不要将Bundler作为根。 Bundler可以要求Sudo是否需要,然后将捆绑包安装为ROOT,将为该计算机上的所有非root用户打破此应用程序。
但这是我唯一能够与上帝奔跑的唯一方法。如果对任何人有帮助,这是在EC2实例上。
添加日志选项对我进行调试有很大帮助。
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"