42

我正在编写一个上帝脚本来监控我的独角兽。我从 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

我已在配置文件中将所有路径声明为绝对路径。有什么想法可能会阻止此脚本工作吗?

4

3 回答 3

14

我没有用unicorn做app server,但是之前用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
于 2010-10-07T02:29:46.330 回答
0

我的问题是我从未捆绑为 root。这是我所做的:

sudo bash
cd RAILS_ROOT
bundle

您会收到一条警告,告诉您永远不要这样做:

不要以 root 身份运行 Bundler。如果需要,Bundler 可以请求 sudo,并且以 root 身份安装您的 bundle 将破坏此计算机上所有非 root 用户的应用程序。

但这是我可以得到resque或独角兽与上帝一起奔跑的唯一方法。如果这对任何人都有帮助,那么这是在一个 ec2 实例上。

于 2014-10-28T18:47:28.583 回答
0

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

God.watch do |w|
  w.log = "#{RAILS_ROOT}/log/god.log"

  # remainder of config
end

最后,我的 bug 竟然是start_scriptin God 是在development环境中执行的。我通过将 附加RAILS_ENV到启动脚本来解决此问题。

start_script = "RAILS_ENV=#{ENV['RACK_ENV']} bundle exec sidekiq -P #{pid_file} -C #{config_file} -L #{log_file} -d"
于 2016-05-30T09:25:55.467 回答