46 votes

Comment puis-je faire redémarrer uWSGI lorsque le script Python est modifié ?

Je ne me souviens plus où, mais j'ai lu que uWSGI peut se recharger comme le serveur de développement Django lorsque le script d'un projet est modifié. Je ne trouve pas cela dans la documentation, ni sur Internet. Comment puis-je faire cela?

J'utilise Ubuntu 12.04 sur mes machines de travail et Debian Squeeze sur les serveurs de stage et de production, Django 1.4 et uWSGI 1.2.

46voto

Gabriel Points 11

Référence : http://projects.unbit.it/uwsgi/wiki/Management

Si vous avez démarré uwsgi avec l'option --touch-reload=/chemin/vers/fichier/spécial/généralement/le.ini, recharger votre uWSGI est une simple question de rechargement par touche de ce fichier avec

touch /chemin/vers/fichier/spécial/généralement/le.ini

Et si vous voulez la capacité de "rechargement automatique", voici le conseil qui permet de le faire : http://projects.unbit.it/uwsgi/wiki/TipsAndTricks#uWSGIdjangoautoreloadmode

40voto

roberto Points 1782

Il existe une option py-autoreload=N dans les versions plus récentes. Il suffit de définir N sur la fréquence (en secondes) des vérifications (3 est une bonne valeur).

12voto

BorisHajduk Points 259

Si vous ne voulez pas perdre le rechargement automatique de django, enregistrez cette méthode de rechargement (c'est-à-dire dans settings.py) :

import uwsgi
from uwsgidecorators import timer
from django.utils import autoreload

@timer(3)
def change_code_gracefull_reload(sig):
    if autoreload.code_changed():
        uwsgi.reload()

Maintenant, si vous modifiez votre code, il sera rechargé.

Auteur: Simone Federici

1voto

mrtipale Points 111

Uwsgi permet également de redémarrer en utilisant kill SIGNAL. Je l'utilise comme ci-dessous :

# ps -efa | grep uwsgi | grep prod
app  13390 13383  0 07:40 ?        00:00:00 /usr/local/bin/uwsgi --ini /etc/uwsgi/apps-enabled/app_prod.ini
app  13417 13390  0 07:40 ?        00:00:00 /usr/local/bin/uwsgi --ini /etc/uwsgi/apps-enabled/app_prod.ini
app  13419 13390  0 07:40 ?        00:00:00 /usr/local/bin/uwsgi --ini /etc/uwsgi/apps-enabled/app_prod.ini
# kill -HUP 13390

Si vous exécutez la même commande, vous verrez que les PID des processus enfants changeront car ils sont relancés par le processus maître. Vérifiez également la configuration d'uwsgi pour les comptes de processus maître/ouvrier. Cette méthode est facile à intégrer avec ansible ou d'autres outils d'automatisation, donc elle est pratique à utiliser à distance.

Cela ne nécessite pas que votre processus d'origine soit démarré avec l'option --touch-reload.

1voto

GenericPtr Points 705

Comme indiqué dans les docs pour redémarrer proprement uWSGI.

# en utilisant kill pour envoyer le signal
kill -HUP `cat /tmp/project-master.pid`
# ou l'option de commodité --reload
uwsgi --reload /tmp/project-master.pid
# ou si uwsgi a été démarré avec touch-reload=/tmp/somefile
touch /tmp/somefile

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X