Как правильно остановить gunicorn
4 ответов
одним из вариантов было бы использовать Supervisor
для управления Gunicorn.
опять же, я не понимаю, почему вы не можете убить процесс через Fabric
.
Предполагая, что вы позволите Gunicorn написать pid-файл вы можете легко прочитать этот файл в .
что-то вроде этого должно работать:
run("kill `cat /path/to/your/file/gunicorn.pid`")
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
показывает демонов с определенным портом.