Accueil > Logiciel > Python > Un daemon UNIX en Python
Un daemon UNIX en Python
dimanche 30 décembre 2007, par
Introduction
Cette classe permet de créer aisément un daemon python. Pour l’utiliser, il suffit de dériver de cette classe et de rajouter une méthode launch(self). Elle gère un système de verrou basé sur un fichier ainsi qu’une méthode permettant de tuer le daemon.
Les méthodes de la classe
__init__
Cette méthode instancie la classe et elle initialise quelques variables.
_daemonExists
Cette méthode teste l’existence du fichier verrou.
_lock
Cette méthode crée le fichier verrou et elle écrit le pid du daemon.
_unlock
Cette méthode ferme le fichier verrou puis elle efface le fichier verrou.
_fork
Cette méthode crée le daemon.
_run
Cette méthode doit être surchargé. Cette méthode effectue le travail en boucle. Elle doit vérifier que la variable "_loop" ne passe pas à "False".
__signalHandler
Cette méthode est le gestionnaire de signaux. Seul le signal SIGTERM est intercepté afin de pouvoir terminer le daemon proprement. Elle modifie la variable "_loop" à "False".
setOutput
Cette méthode permet de rediriger les flux stdout et stderr vers des fichiers que l’on aura crée.
launch
Cette méthode effectue tous les appels nécessaires à la création du daemon. Elle finit par appeler la méthode "_run". Si le daemon est arrêté, elle restaure les flux et supprime le fichier verrou grâce à la méthode "_unlock".
Exemple d’utilisation
Cette exemple écrit, dans le fichier "/var/log/pyTest.log", l’heure courante ainsi que le "pid" du processus. Cette opération est effectué toutes les cinq secondes.
Conclusion
Cette classe devrait permettre de développer très rapidement des scripts Python qui seront utilisés comme daemon.
Messages
1. Un daemon UNIX en Python, 16 septembre 2010, 21:52
Je déterre cet article mais je suis débutant.
Question bête mais comment j’arrête le daemon ?
1. Un daemon UNIX en Python, 18 septembre 2010, 12:27, par Steve
Bonjour,
Pour arrêter le daemon, il suffit de stopper l’exécution de la boucle se trouvant dans la méthode _run (en passant d’une façon ou une autre _loop à False).
Ne connaissant pas vos besoins, je ne saurais vous en dire plus.
Steve