我目前在暂存(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不会启动?
答案 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