我正在制作神剧本来监视我的独角兽。我从GitHub的示例脚本开始,一直在修改它以匹配我的服务器配置。一旦上帝奔跑, god stop unicorngod 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"
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top