Seite 1 von 1
Daemon und SIGTERM
Verfasst: Sonntag 6. Dezember 2009, 22:58
von conloos
Hallo,
ich habe einen Daemon, nach:
http://code.activestate.com/recipes/66012/.
Nach allen fork()'s habe ich die Signale gebunden:
Code: Alles auswählen
try:
signal.signal(signal.SIGTERM, on_sigterm)
signal.signal(signal.SIGINT, on_sigterm)
except Exception,e:
logger.debug(_(u"Das binden der SIGTERM und SIGINT ist fehlgeschlagen: %s" % e))
raise Exception, e
Wenn ich dem Daemon ein:
schicke reagiert er aber nicht drauf. Der Daemon wird hart beendet, ohne die on_sigterm() auszuführen.
Irgendwelche Ideen?
grüße Con
Verfasst: Sonntag 6. Dezember 2009, 23:36
von Darii
Was ist on_sigterm? Vllt. schlägt da drin ja was fehl? Desweiteren habe ich festellen müssen, dass die bei Activestate vorgeschlagene Lösung zu Problemen führen kann. Ich würde die Django-Implementierung empfehlen:
http://code.djangoproject.com/browser/d ... emonize.py
Verfasst: Montag 7. Dezember 2009, 09:49
von conloos
Ne, das erste was on_siterm() macht ist eine logging nachricht ...
on_sigterm() wird also nicht aufgerufen.
Code: Alles auswählen
def on_sigterm(self, signum, frame):
u"""Reagieren auf das SIGTERM- Signal.
Auf POSIX kompatiblen Plattformen bedeutet das SIGTERM- Signal, dass
der Prozess beendet werden soll. Das SIGTERM wird normaler weise durch ein SIGKILL ausgelöst."""
logger.debug(_(u'on_sigterm'))
shutdown = self.stop_plugins(self.plugins)
self.running = False
if shutdown == True:
sys.stdout(_(u"Alle Plugins wurden erfolgreich beendet."))
Das richtige binden ist:
Code: Alles auswählen
try:
signal.signal(signal.SIGTERM, self.on_sigterm)
signal.signal(signal.SIGINT, self.on_sigterm)
except Exception,e:
logger.debug(_(u"Das binden der SIGTERM und SIGINT ist fehlgeschlagen: %s" % e))
raise Exception, e
Sollte also eigentlich gehen, ich gug mir mal die vorgeschlagene django implimentierung an.
Verfasst: Montag 7. Dezember 2009, 10:05
von Darii
conloos hat geschrieben:Ne, das erste was on_siterm() macht ist eine logging nachricht ...
on_sigterm() wird also nicht aufgerufen.
Oder das Logging schlägt schlicht und ergreifend fehl. Was durchaus passieren kann, wenn die stdout etc. nicht richtig weitergeleitet wurden, guck dir wirklich mal die Django-Implementierung an.
Verfasst: Montag 7. Dezember 2009, 21:54
von conloos
Hab ich gemacht und ein paar Sachen übernommen ... danke
con