La journalisation uWSGI ne fonctionne pas si le fichier journal est supprimé

Mon objective est de faire pivoter les journaux générés par uWSGI, mais lorsque le fichier journal d’origine est supprimé (après la compression), il n’est plus recréé.

J’ai donc pensé que l’application devait redémarrer le processus maître après la suppression du fichier. J’utilise ce script RESTART:

/home/tester/uwsgi-18 --reload /var/run/uwsgi/my_app_tester/my_app_tester.pid 

L’application redémarre, mais pas le journal.

Pour que la journalisation fonctionne à nouveau, je dois tuer -2 le processus et exécuter à nouveau le script START, afin qu’un autre numéro de processus soit généré et que la journalisation fonctionne à nouveau.

De toute évidence, je ne veux pas un tel arrêt difficile juste pour les rondins en rotation …

Mon application est construite avec Catalyst, le serveur exécute Nginx et voici le script uWSGI START:

 /home/tester/uwsgi-18 --master --daemonize /var/log/uwsgi/my_app_tester/log --socket /tmp/uwsgi/my_app_tester/my_app_tester.socket --processes 1 --psgi /home/tester/my_app/my_app.psgi --pidfile /var/run/uwsgi/my_app_tester/my_app_tester.pid --procname-master TESTER -L 

Existe-t-il un autre moyen de redémarrer l’application sans perdre les connexions et la journalisation?

Merci d’avance: Migue

    Vous avez plusieurs approches:

    1) copytruncate dans le script logrotate, cela fonctionnera de manière fiable et sans l’aide de uWSGI

    2) Rotation du journal uWSGI: --log-maxsize fera automatiquement pivoter les journaux lorsqu’une taille spécifique est atteinte

    3) logrotation classique + rechargement de journal, ajoutez simplement --log-master et déclenchez le rechargement du journal avec http://uwsgi-docs.readthedocs.org/en/latest/MasterFIFO.html

    Il existe également d’autres approches (comme le déclenchement de la réouverture du journal lorsque vous touchez un fichier), mais les précédentes sont les plus courantes.