2016-08-09 2 views
0

J'essaie de créer un service démon en python avec log to file opption en utilisant la journalisation. Si j'ajoute le paramètre pidfile au constructeur daemon.DaemonContext, le consignateur n'enregistre aucun message dans le fichier logger.log. Mais si je supprime ce paramètre, tout fonctionne. s'exécute sans aucune erreur. Quelqu'un peut-il savoir pourquoi le paramètre pidfile dans daemon.DaemonContext désactive les messages du journal? et comment puis-je résoudre cela?Définir pidfile dans DaemonContext Désactiver le logger dans python

Toute aide sera appréciée. Merci

import signal 
import daemon 
import lockfile 
import logging 
import logging.handlers 

def run(): 

    logger = logging.getLogger("DaemonLog") 
    logger.setLevel(logging.INFO) 
    handler = logging.FileHandler('logger.log') 
    handler.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")) 
    logger.addHandler(handler) 

    daemon_context = daemon.DaemonContext(
     working_directory='/opt/myDaemon', 
     umask=0o002, 
     pidfile=lockfile.FileLock('/var/run/myDaemon.pid'), 
     files_preserve=[handler.stream] 
    ) 
    daemon_context.signal_map = { 
     signal.SIGTERM: terminate_collector, 
     signal.SIGHUP: terminate_collector, 
     signal.SIGABRT: terminate_collector 
    } 

    with daemon_context as context: 
     while True: 
      logger.info("log") 
      func() 
      time.sleep(PARAM_SLEEP) 

if __name__ == "__main__": 
    run() 

Répondre

0

Je réussis à résoudre le problème. Le problème est que pas pidfile a été créé avec la commande:

pidfile=lockfile.FileLock('/var/run/myDaemon.pid') 

La solution est d'utiliser daemon.pidfile module au lieu du module lockfile:

pidfile=daemon.pidfile.PIDLockFile('/var/run/myDaemon.pid') 

solution de code complet:

import signal 
import daemon 
import daemon.pidfile 
import lockfile 
import logging 
import logging.handlers 

def run(): 

    logger = logging.getLogger("DaemonLog") 
    logger.setLevel(logging.INFO) 
    handler = logging.FileHandler('logger.log') 
    handler.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")) 
    logger.addHandler(handler) 

    daemon_context = daemon.DaemonContext(
     working_directory='/opt/myDaemon', 
     umask=0o002, 
     pidfile=daemon.pidfile.PIDLockFile('/var/run/myDaemon.pid'), 
     files_preserve=[handler.stream] 
    ) 
    daemon_context.signal_map = { 
     signal.SIGTERM: terminate_collector, 
     signal.SIGHUP: terminate_collector, 
     signal.SIGABRT: terminate_collector 
    } 

    with daemon_context as context: 
     while True: 
      logger.info("log") 
      func() 
      time.sleep(PARAM_SLEEP) 

if __name__ == "__main__": 
    run()