2013-02-01 100 views
6

我正在運行Foreman(Ubuntu),一旦我得到它的工作將切換到使用暴發戶。工頭無法啓動Nginx,但我可以手動啓動它。爲什麼?

我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 

S o爲什麼不是由Foreman啓動時啓動的nginx?

+0

檢查出你的nginx的日誌,「有碼0退出」可能意味着很多東西。通常日誌可以在/ var/log/nginx –

+0

@TanelSuurhans找到感謝您的建議。不幸的是,有兩個日誌,但/var/log/nginx/access.log和/var/log/nginx/error.log都是空的。 – Undistraction

+0

如果您執行'$ sudo foreman start',會發生什麼情況? –

回答

4

這是您的Procfile中的一個問題。

nginx命令不能使用sudo裏面的foreman,因爲它會always ask for a password然後它會失敗。這就是爲什麼你沒有啓動nginx並且日誌是空的。

如果你真的需要使用procfile內須藤你可以使用這樣的事情:

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

,我真的不推薦。其他選項是致電sudo foreman start

欲瞭解更多信息查看這issue on github,這正是你想要解決的。

如果它適合你,請讓我發佈。

3

您應該可以爲本地用戶添加無密碼的sudo訪問權限,以允許管理此服務。這可能是一個很大的安全漏洞,但是如果您將可以運行的命令列入白名單,則可以顯着降低風險。我建議不加密碼的sudoers的服務命令和其他任何條目要腳本:

的/ etc/sudoers文件:

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

如果你不舒服,這將是運行的另一種選擇nginx的直接,而不是通過服務管理:

nginx: /usr/sbin/nginx -c /path/to/nginx.conf 
相關問題