2016-08-09 9 views
0

Ich versuche, einen Daemon-Dienst in Python mit Protokoll in Datei-Option mit Protokollierung zu erstellen. Wenn ich den Parameter pidfile dem Konstruktor daemon.DaemonContext hinzufüge, protokolliert der Logger keine Meldungen in der Datei logger.log. Aber wenn ich diesen Parameter entferne, funktioniert alles. läuft ohne Fehler. Kann jemand wissen, warum Pidfile-Parameter in daemon.DaemonContext Log-Nachrichten deaktivieren? und wie kann ich das lösen?Define pidfile in DaemonContext disable logger in python

Jede Hilfe wird geschätzt. Danke

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() 

Antwort

0

Es gelingt mir, das Problem zu lösen. Das Problem war, dass kein pidfile mit dem Befehl erstellt wurde:

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

Die Lösung ist daemon.pidfile Modul anstelle des lockfile Modul zu verwenden:

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

Voll Code Lösung:

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()