我正在制作一个神剧脚本来监视我的独角兽。我从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
我已在配置文件中将所有路径声明为绝对路径。什么可能阻止这个脚本工作的想法?
答案 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_script
在development
环境中执行的。我通过将RAILS_ENV
附加到起始脚本来修复此问题。
start_script = "RAILS_ENV=#{ENV['RACK_ENV']} bundle exec sidekiq -P #{pid_file} -C #{config_file} -L #{log_file} -d"