工头无法启动Nginx,但我可以手动启动它。为什么?

时间:2013-02-01 11:29:35

标签: ruby-on-rails ruby process nginx foreman

我目前在暂存(Ubuntu)上运行Foreman,一旦我开始工作,就会切换到使用upstart。

我的Procfile.staging看起来像这样:

nginx: sudo service nginx start
unicorn: bundle exec unicorn -c ./config/unicorn.rb
redis: bundle exec redis-server
sidekiq: bundle exec sidekiq -v -C ./config/sidekiq.yml

我可以使用:

成功启动nginx
$ sudo service nginx start

然而,当我运行$ foreman start,而其他三个进程成功启动时,nginx不会:

11:15:46 nginx.1   | started with pid 15966
11:15:46 unicorn.1 | started with pid 15968
11:15:46 redis.1   | started with pid 15971
11:15:46 sidekiq.1 | started with pid 15974
11:15:46 nginx.1   | Starting nginx: nginx.
11:15:46 nginx.1   | exited with code 0
11:15:46 system    | sending SIGTERM to all processes
SIGTERM received
11:15:46 unicorn.1 | terminated by SIGTERM
11:15:46 redis.1   | terminated by SIGTERM
11:15:46 sidekiq.1 | terminated by SIGTERM

那么为什么在Foreman开始时nginx不会启动?

2 个答案:

答案 0 :(得分:4)

这是您的Procfile中的一个问题。

nginx命令无法在sudo内使用foreman,因为它会always ask for a password然后失败。这就是为什么你没有开始nginx并且日志是空的。

如果你真的需要在proc文件中使用sudo,你可以使用这样的东西:

sudo_app: echo "sudo_password" | sudo -S app_command
nginx: echo "sudo_password" | sudo -S service nginx start

我真的不推荐。其他选项是致电sudo foreman start

有关详细信息,请查看此issue on github,这正是您要解决的问题。

如果它适合你,请让我发布。

答案 1 :(得分:3)

您应该能够为本地用户添加没有密码的sudo访问权限,以便管理此服务。这可能是一个很大的安全漏洞,但如果您将哪些命令列入白名单,则可以大大降低风险。我建议为services命令添加无密码sudoers条目以及您要编写脚本的任何其他内容:

的/ etc / sudoers的:

your_user_name       ALL = (ALL) NOPASSWD: /usr/sbin/service

如果您对此不满意,另一个选择是直接运行nginx,而不是通过服务管理器运行:

nginx: /usr/sbin/nginx -c /path/to/nginx.conf