Ich installierte python-daemon
und jetzt versuche ich, die Signalverarbeitung richtig zu bekommen. Mein Code:Signalverarbeitung in Python-Daemon
#!/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()
Wenn ich starten Sie den Code alles wie erwartet funktioniert: Der Text pythonDaemon läuft alle 5 Sekunden auf /var/log/syslog
geschrieben wird. Aber wenn ich den Daemon mit kill -TERM *PID*
beenden möchte, wird der Daemon beendet, aber der Text PythonDaemon STOP fehlt von Syslog.
Was mache ich falsch?
NB: Ich arbeite nicht mit from daemon import runner
hier, denn das gibt mir einen Fehler (sieht aus wie ich brauche eine ältere Version von lockfile
) und ich werde das nicht beheben, es sei denn, es ist die einzige Möglichkeit, die Signalbehandlung richtig zu machen .