我正在编写一个上帝脚本来监控我的独角兽。我从GitHub的示例脚本开始,并一直在修改它以匹配我的服务器配置。一旦上帝开始运行,像god stop unicorn和god restart unicorn这样的命令就可以正常工作了。
但是,god start unicorn会生成WARN: unicorn start command exited with non-zero code = 1。奇怪的是,如果我直接从配置文件中复制启动脚本,它就像一个全新的野马一样启动。
这是我的start命令:
/usr/local/bin/unicorn_rails -c /home/my-linux-user/my-rails-app/config/unicorn.rb -E production -D我已经在配置文件中将所有路径声明为绝对路径。你知道是什么原因导致这个脚本无法工作吗?
发布于 2010-10-07 10:29:46
我没有使用过unicorn作为应用服务器,但我以前使用过god来进行监控。
如果我没记错的话,当你启动上帝并给出你的配置文件时,它会自动启动你告诉它观看的任何东西。独角兽可能已经在运行了,这就是它抛出错误的原因。
一旦启动了god,就可以运行god status来检查这一点。如果不是这样,您可以在命令行上检查命令的退出状态:
/usr/local/bin/unicorn_rails -c /home/my-linux-user/my-rails-app/config/unicorn.rb -E production -D; echo $?;
该回显将打印最后一个命令的退出状态。如果为零,则最后一条命令没有报告错误。尝试连续两次启动unicorn,我希望第二次它会返回1,因为它已经在运行了。
编辑:
包括来自评论的实际解决方案,因为这似乎是一个流行的回应:
如果您的进程需要以特定用户身份运行,则可以设置显式用户和组。
God.watch do |w|
w.uid = 'root'
w.gid = 'root'
# remainder of config
end发布于 2014-10-29 02:47:29
我的问题是我从来没有捆绑为root。下面是我所做的:
sudo bash
cd RAILS_ROOT
bundle你会得到一个警告,告诉你永远不要这样做:
不要以超级用户身份运行Bundler。如果需要的话,Bundler可以请求sudo,并且以root用户身份安装您的包将会破坏这台机器上所有非root用户的应用程序。
但这是唯一能让我和上帝一起奔跑的方法。这是在一个ec2实例上,如果这对任何人有帮助的话。
发布于 2016-05-30 17:25:55
添加日志选项对我的调试有很大帮助。
God.watch do |w|
w.log = "#{RAILS_ROOT}/log/god.log"
# remainder of config
end最后,我的bug被证明是在development环境下执行的上帝的start_script。我通过将RAILS_ENV附加到启动脚本修复了这个问题。
start_script = "RAILS_ENV=#{ENV['RACK_ENV']} bundle exec sidekiq -P #{pid_file} -C #{config_file} -L #{log_file} -d"https://stackoverflow.com/questions/3877178
复制相似问题