Как правильно остановить gunicorn

Я начинаю gunicorn с команды Django 'python manage.py run_gunicorn'. Как я могу остановить gunicorn?

Примечание: у меня есть полуавтоматическое развертывание сервера с fabric. Таким образом, используя что-то вроде ps aux | grep gunicorn убить процесс вручную с помощью pid не является вариантом.

4 ответов


одним из вариантов было бы использовать Supervisor для управления Gunicorn.

опять же, я не понимаю, почему вы не можете убить процесс через Fabric. Предполагая, что вы позволите Gunicorn написать pid-файл вы можете легко прочитать этот файл в .

что-то вроде этого должно работать:

run("kill `cat /path/to/your/file/gunicorn.pid`")

чтобы увидеть процессы ps ax|grep gunicorn и остановить gunicorn_django это pkill gunicorn.


kill -9 `ps -eo pid,command | grep 'gunicorn.*${moduleName:appName}' | grep -v grep | sort | head -1 | awk '{print }'`

ps -eo pid,command будет извлекать только идентификатор процесса, команду и args из

grep -v grep чтобы избавиться от вывода, Как "grep --color=auto xxx"

sort | head -1 сделать сортировку по возрастанию и получить первую строку

awk '{print }' чтобы вернуть pid

еще одна вещь, на которую вам может потребоваться обратить внимание: где установлен gunicorn и какой из них вы используете?

Ubuntu 16 имеет gunicorn установлен по умолчанию, исполняемый файл gunicorn3 и расположен на /usr/bin /gunicorn3, и если вы установили его pip, он находится на/usr/local/bin / gunicorn. Вам нужно будет использовать which gunicorn и gunicorn -v чтобы выяснить.


pkill gunicorn останавливает все демоны gunicorn. Поэтому, если вы используете несколько экземпляров gunicorn с разными портами, попробуйте этот сценарий оболочки.

#!/bin/bash
Port=5000
pid=`ps ax | grep gunicorn | grep $Port | awk '{split(,a," "); print a[1]}' | head -n 1`
if [ -z "$pid" ]; then
  echo "no gunicorn deamon on port $Port"
else
  kill $pid
  echo "killed gunicorn deamon on port $Port"
fi

ps ax | grep gunicorn | grep $Port показывает демонов с определенным портом.