谁应该拥有上帝进程?

谁应该拥有上帝进程?

我在 ubuntu 上运行了一个堆栈,由用 Sinatra 和 GrapeAPI 编写的 Rack 应用程序组成。该应用程序堆栈包括 Redis、Postgres、Nginx 和 unicorn。我想使用 god 来处理进程监控。

目前,部署是通过 git 在部署用户下进行的。此部署用户不是 sudoer。我的问题是:谁应该拥有上帝进程?最好以 sudoer 还是部署用户身份运行该进程?

以部署用户身份运行将加载 rbenv 以允许 unicorn 启动,但是部署用户没有 sudo 访问权限,因此无法运行 init.d 脚本。

另一方面,当我以不同的用户身份(即部署用户)运行时,god 无权访问 rbenv 提供的 bundle exec,因此如果 unicorn 进程关闭,则无法启动它们。

答案1

god 进程应由 upstart 脚本控制,因此应以 sudo 用户身份运行它。binstubs 使之成为可能。binstub 是 gem 安装的可执行文件的垫片。Binstubs 由 bundler 提供。它们允许从系统上的任何地方运行 bin 文件。为此,必须在 upstart 脚本中添加 rbenv 路径。

export PATH=/home/deploy/.rbenv/shims:/home/deploy/.rbenv/bin:$PATH
eval "$(rbenv init -)"
export BUNDLE_GEMFILE=$APPLICATION_ROOT/Gemfile

在此之后,对 binstubs 的任何直接调用都将加载您的包并正确执行。使用此模式,可以使用 upstart 运行 unicorn 和 resque。这使得您的整个堆栈都可以使用 upstart 执行,并且您的 god 配置变得轻而易举,因为您所要做的就是调用您的 upstart 脚本。HTH。

相关内容