Обработка сигналов в python-daemon
Я установил 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()
когда я запускаю код, все работает так, как ожидалось: текст pythonDaemon работает записывается на /var/log/syslog
каждые 5 секунд.
Но когда я хочу уничтожить демона с помощью kill -TERM *PID*
демон завершается, но текст pythonDaemon стоп отсутствует файл syslog.
что я делаю не так?
NB: I не работаю с from daemon import runner
здесь, потому что это дает мне ошибку (похоже, мне нужна более старая версия lockfile
) и я не буду исправлять это, если это не единственная возможность получить правильную обработку сигнала.
1 ответов
ваш код выглядит нормально, за исключением обработчика сигнала не вызывается, потому что он имеет неправильную подпись. Сделайте это так:
def programCleanup(signum, frame):
цитирование документов (сигнал.signal ()):
обработчик вызывается с двумя аргументами: номер сигнала и текущий кадр стека