Instalé python-daemon y ahora estoy tratando de manejar correctamente la señal. Mi código:
#!/usr/bin/env python # -*- coding: utf-8 -*- import signal, time, syslog import daemon def runDaemon(): context = daemon.DaemonContext() context.signal_map = { signal.SIGTERM: programCleanup } context.open() with context: doMainProgram() def doMainProgram(): while True: syslog.syslog("pythonDaemon is running") time.sleep(5) def programCleanup(): syslog.syslog("pythonDaemon STOP") if __name__ == "__main__": runDaemon() Cuando inicio el código, todo funciona como se esperaba: el texto que se está ejecutando pythonDaemon se escribe en /var/log/syslog cada 5 segundos. Pero cuando quiero finalizar el daemon con kill -TERM *PID* el daemon finaliza pero falta el texto pythonDaemon STOP en syslog.
¿Qué estoy haciendo mal?
NB: No estoy trabajando con el from daemon import runner aquí, porque eso me da un error (parece que necesito una versión anterior de lockfile ) y no lo arreglaré a menos que sea la única posibilidad de obtener el manejo correcto de la señal.
Su código se ve bien, excepto que no se llama al controlador de señal porque tiene la firma incorrecta. Hazlo así:
def programCleanup(signum, frame):Citando los documentos ( señal.señal() ):
El controlador se llama con dos argumentos: el número de señal y el marco de pila actual