Maintenir la connexion et/ou stdout/stderr en Python Démon

Chaque recette que j'ai trouvé pour la création d'un processus démon en Python implique de séparer en deux fois (pour Unix), puis de fermer tous les descripteurs de fichiers ouverts. (Voir http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/ pour un exemple).

C'est tout assez simple, mais je semble avoir un problème. Sur la machine de production que je suis en train d'ouvrir, mon démon est l'abandon silencieuse depuis tous les descripteurs de fichiers ouverts ont été fermés. Je vais avoir un moment délicat de débogage de la question à l'heure actuelle et je me demande ce que la bonne façon de les attraper et de les connecter ces erreurs sont.

Quelle est la bonne façon de journalisation de l'installation telle qu'elle continue à travailler après daemonizing? Dois-je viens de l'appeler logging.basicConfig() une seconde fois après daemonizing? Quelle est la bonne façon de capturer stdout et stderr? Je suis flou sur les détails de pourquoi tous les fichiers sont fermés. Idéalement, mon code principal pourrait simplement appeler daemon_start(pid_file) et de journalisation continuera à travailler.

Appel de la journalisation de la configuration APRÈS l'daemonizing est en effet la voie à suivre.
J'ai remarqué ce commentaire dans l'exploitation forestière docs: "Cette fonction ne fait rien si la racine de l'enregistreur a déjà des gestionnaires configurés pour elle." Si je veux la journalisation avant et après daemonizing, comment cela affecte la situation?
Si je suis correct, il est possible d'ajouter des gestionnaires/filtres après l'initialisation de l'enregistreur. Cela signifie que vous pourriez ajouter un FileHandler avant de démarrer le démon de contexte et d'en ajouter un autre, après le démarrage. Je ne suis pas entièrement sûr que cela fonctionne bien.

OriginalL'auteur dave mankoff | 2012-11-01