Estoy usando python-daemon, y tengo el problema de que cuando kill -9
un proceso, deja un archivo pid (ok) y la próxima vez que ejecuto mi programa no funciona a menos que ya haya eliminado el archivo pid a mano (no está bien).contexto python-daemon no se inicia cuando hay un archivo PID obsoleto
que capturar todas las excepciones con el fin de que context.close()
se llama antes de terminar - cuando esto ocurre (por ejemplo en un kill
) los archivos se eliminan /var/run/mydaemon.pid* y una posterior ejecución demonio tiene éxito. Sin embargo, al usar SIGKILL (kill -9
), no tengo la oportunidad de llamar al context.close()
, y los archivos/var/run permanecen. En este caso, la próxima vez que ejecute mi programa no se iniciará correctamente: el proceso original retorna, pero el proceso daemonizado bloquea al context.open()
.
Parece que python-daemon debería notar que hay un archivo pid para un proceso que ya no existe y borrarlo, pero eso no está sucediendo. ¿Se supone que debo estar haciendo esto a mano?
Nota: No estoy usando with
porque el código se ejecuta en Python 2,4
from daemon import DaemonContext
from daemon.pidlockfile import PIDLockFile
context = DaemonContext(pidfile = PIDLockFile("/var/run/mydaemon.pid"))
context.open()
try:
retry_main_loop()
except Exception, e:
pass
context.close()
Fue hace dos años por lo que mi memoria es vaga, pero sí, creo que esto es cómo lo hice (lo que quería decir "haciendo esto a mano" referenciado en la pregunta). Marcado como respuesta porque por qué no. – kdt