Comment arrêter gunicorn correctement

Je démarre gunicorn avec la commande Django 'python manage.py run_gunicorn'. Comment puis-je arrêter gunicorn?

Remarque: j'ai un déploiement de serveur semi-automatisé avec fabric. Ainsi, utiliser quelque chose comme ps aux | grep gunicorn pour tuer le processus manuellement par pid n'est pas une option.

28
demandé sur Aurora 2013-01-30 17:00:55

4 réponses

Une option serait d'utiliser Supervisor pour gérer Gunicorn.

Là encore, Je ne vois pas pourquoi vous ne pouvez pas tuer le processus via Fabric. En supposant que vous laissez Gunicorn écrire un fichier pid vous pouvez facilement lire ce fichier dans un Fabric commande.

Quelque chose comme ça devrait fonctionner:

run("kill `cat /path/to/your/file/gunicorn.pid`")
15
répondu arie 2017-01-14 10:55:40

Pour voir le processus est ps ax|grep gunicorn et pour arrêter gunicorn_django est pkill gunicorn.

52
répondu Voislav Sauca 2013-01-30 13:29:45
kill -9 `ps -eo pid,command | grep 'gunicorn.*${moduleName:appName}' | grep -v grep | sort | head -1 | awk '{print $1}'`

ps -eo pid,command récupère uniquement l'id de processus, la commande et les arguments

grep -v grep pour se débarrasser de la sortie comme 'grep --color = Auto xxx'

sort | head -1 pour faire un tri croissant et obtenir la première ligne

awk '{print $1}' pour récupérer pid

Encore une chose à laquelle vous devrez peut-être faire attention: où gunicorn est installé et lequel vous utilisez?

Ubuntu 16 A gunicorn installé par défaut, l'exécutable est gunicorn3 et situé sur / usr / bin / gunicorn3, et si vous l'avez installé par pip, c'est situé sur / usr / local / bin / gunicorn. Vous devez utiliser which gunicorn et gunicorn -v pour le savoir.

0
répondu delusionxb 2018-08-15 06:50:56

pkill gunicorn arrête tous les démons gunicorn. Donc, si vous exécutez plusieurs instances de gunicorn avec différents ports, essayez ce script shell.

#!/bin/bash
Port=5000
pid=`ps ax | grep gunicorn | grep $Port | awk '{split($0,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 affiche les démons avec un port spécifique.

0
répondu Takao Shibamoto 2018-08-15 21:35:36