Подтвердить что ты не робот

Каков правильный способ оставить пулемет?

Я хочу создать Flask + Nginx + Gunicorn. У меня есть настройка и запуск Nginx, и я запускаю gunicorn, как описано в документах:

gunicorn app:app

Но когда я выхожу из сервера, выйдет процесс пушки? Каков правильный способ убедиться, что он остается включенным для Nginx для подключения к нему и перезапускается, если он сработает?

4b9b3361

Ответ 1

Я бы посмотрел что-то вроде Supervisor.

Ответ 2

Используйте --daemon во время запуска gunicorn. Пример:

gunicorn grand56.wsgi:application --name grand56 --workers 3 --user=root --group=root --bind=127.0.0.1:1001 --daemon

Ответ 3

используйте --daemon для привязки команды gunicorn. например:

gunicorn --bind 0.0.0.0:8001 your_project.wsgi --daemon

Ответ 4

Главное отметить, что при запуске процесса из командной строки это дочерний элемент вашего терминального процесса (то есть дочерний элемент bash). Когда вы выходите из сервера, ваш процесс bash завершается - как и все его дочерние элементы.

Вы хотите использовать любую имеющуюся у вас систему для управления nginx, также управляйте gunicorn (что-нибудь от init.d или сценариев Upstart до специализированных мониторов процессов, таких как Monit, Supervisor, Bluepill, Foreman и т.д.)

Ответ 5

Обратите внимание на Шона.

Однако вы можете запустить его на лету, как это:

nohup gunicorn -c config.py </dev/null >/dev/null 2>&1, и он больше не будет зависеть от терминального соединения. Вы можете заменить >/dev/null на что-то вроде >somelogfile, если вы хотите сохранить любой вывод.

Но для использования в производстве лучше всего интегрировать его в любой инструмент, который вы используете для управления процессами.

Ответ 6

Попробуйте следующее:

nohup gunicorn app:app &

Ответ 8

Запуск обниматься, как это.

--daemon должен держать процесс в фоновом режиме.

--access-logfile для ведения журнала запросов

--bind = <ip>: <port> Предоставление IP разрешит доступ из других систем (если прокси не нужен).

gunicorn <pyscirpt_name>:__hug_wsgi__ --name  caassist -w 4 --access-logfile /var/logs/gunicorn/gunicorn_access.log --daemon --bind=<ip>:<port>

Ответ 9

Supervisor - отличное кроссплатформенное решение для управления процессами. Он очень многофункциональный и (на мой взгляд) требует гораздо больше настроек, чем некоторые альтернативы vanilla Linux (upstart, sysv, systemd). Вам обязательно следует использовать что-то подобное для запуска, мониторинга и (при необходимости) перезапуска процесса.

Независимо от того, каким менеджером процессов вы в конечном итоге пользуетесь, вы все равно можете легко оставить gunicorn "запущенным неправильно" (то есть как пользователь root). Я думаю, что некоторые важные детали, оставленные другими ответами, заключаются в том, что вам, вероятно, нужен один (не-root) пользователь, владеющий процессом gunicorn, который связывается с сокетом unix, который принадлежит этому пользователю и группе nginx и имеет разрешения 770. С помощью gunicorn вы вместо этого задаете маску, поэтому инвертируйте 770 в 007 и используйте флаг -m. Таким образом, только gunicorn и nginx могут читать/записывать/выполнять в сокет, и порт не требуется. Вы можете указать пользователя и группу вашего процесса gunicorn с флагами -u и -g, и он создаст сокет с этими владельцами. Что бы вы ни использовали для процесса mgmt, для nginx/gunicorn, вы, вероятно, захотите что-то вроде этого в своем скрипте запуска:

exec gunicorn wsgi:app -u gunicorn -g nginx -m 007 -b gunicorn.sock >> /var/log/$<service_name>.sys.log 2>&1

Убедитесь, что у пользователя gunicorn есть разрешение на запись в файл журнала. Затем в nginx, где у вас ранее был ip/порт (т.е. 0.0.0.0:5000), вы указываете путь к сокету (т.е. /usr/share/nginx/html/gunicorn.sock). Обратите внимание, что здесь я не использовал флаг --daemon, но я использовал exec, это предполагает наличие менеджера процессов, который будет запускать gunicorn как дочерний процесс с exec.

Вы можете найти все различные флаги здесь.