首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用God监控Unicorn - Start退出,非零代码=1

使用God监控Unicorn - Start退出,非零代码=1
EN

Stack Overflow用户
提问于 2010-10-07 05:51:46
回答 3查看 5.3K关注 0票数 42

我正在编写一个上帝脚本来监控我的独角兽。我从GitHub的示例脚本开始,并一直在修改它以匹配我的服务器配置。一旦上帝开始运行,像god stop unicorngod restart unicorn这样的命令就可以正常工作了。

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

这是我的start命令:

代码语言:javascript
复制
/usr/local/bin/unicorn_rails -c /home/my-linux-user/my-rails-app/config/unicorn.rb -E production -D

我已经在配置文件中将所有路径声明为绝对路径。你知道是什么原因导致这个脚本无法工作吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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,因为它已经在运行了。

编辑:

包括来自评论的实际解决方案,因为这似乎是一个流行的回应:

如果您的进程需要以特定用户身份运行,则可以设置显式用户和组。

代码语言:javascript
复制
God.watch do |w|
  w.uid = 'root'
  w.gid = 'root'

  # remainder of config
end
票数 14
EN

Stack Overflow用户

发布于 2014-10-29 02:47:29

我的问题是我从来没有捆绑为root。下面是我所做的:

代码语言:javascript
复制
sudo bash
cd RAILS_ROOT
bundle

你会得到一个警告,告诉你永远不要这样做:

不要以超级用户身份运行Bundler。如果需要的话,Bundler可以请求sudo,并且以root用户身份安装您的包将会破坏这台机器上所有非root用户的应用程序。

但这是唯一能让我和上帝一起奔跑的方法。这是在一个ec2实例上,如果这对任何人有帮助的话。

票数 0
EN

Stack Overflow用户

发布于 2016-05-30 17:25:55

添加日志选项对我的调试有很大帮助。

代码语言:javascript
复制
God.watch do |w|
  w.log = "#{RAILS_ROOT}/log/god.log"

  # remainder of config
end

最后,我的bug被证明是在development环境下执行的上帝的start_script。我通过将RAILS_ENV附加到启动脚本修复了这个问题。

代码语言:javascript
复制
start_script = "RAILS_ENV=#{ENV['RACK_ENV']} bundle exec sidekiq -P #{pid_file} -C #{config_file} -L #{log_file} -d"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3877178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档