Форман не может запустить Nginx, но я могу запустить его вручную. Почему?

В настоящее время я использую Foreman на стадии подготовки (Ubuntu), и как только я заработаю, я переключусь на использование выскочки.

Мой 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

Так почему же nginx не запускается при запуске Форманом?


person Undistraction    schedule 01.02.2013    source источник
comment
Проверьте свои журналы nginx, выход с кодом 0 может означать многое. Обычно логи можно найти в /var/log/nginx.   -  person Tanel Suurhans    schedule 04.02.2013
comment
@TanelSuurhans Спасибо за предложение. К сожалению, есть два журнала, но оба /var/log/nginx/access.log и /var/log/nginx/error.log пусты.   -  person Undistraction    schedule 04.02.2013
comment
Что произойдет, если вместо этого вы сделаете $ sudo foreman start?   -  person Breaking not so bad    schedule 06.02.2013


Ответы (2)


Проблема в вашем Procfile.

Команда nginx не может использовать sudo внутри foreman, потому что она будет always ask for a password, а затем завершится ошибкой. Вот почему у вас не запускается nginx и логи пустые.

Если вам действительно нужно использовать sudo внутри procfile, вы можете использовать что-то вроде этого:

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

что я очень не рекомендую. Другой вариант - позвонить sudo foreman start

Для получения дополнительной информации ознакомьтесь с этой проблемой на github, это именно то, что вы хотите решить.

Держите меня в курсе, если это сработает для вас.

person Nicos Karalis    schedule 04.02.2013

Вы должны иметь возможность добавить доступ sudo без пароля для вашего локального пользователя, чтобы разрешить управление этой службой. Это может быть большой дырой в безопасности, но если вы внесете в белый список команды, которые можно запускать, вы значительно снизите риск. Я рекомендую добавить запись sudoers без пароля для команды services и всего остального, что вы хотите заскриптовать:

/etc/sudoers:

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

Другой вариант, если вас это не устраивает, — запустить nginx напрямую, а не через диспетчер служб:

nginx: /usr/sbin/nginx -c /path/to/nginx.conf
person Winfield    schedule 06.02.2013