Я использую python-daemon, и у меня проблема в том, что когда я kill -9
процесс, он оставляет pidfile (хорошо), и в следующий раз, когда я запускаю свою программу, он не работает, если я уже не удалилpid-файл вручную (не в порядке).
Я перехватываю все исключения для того, чтобы context.close()
вызывался перед завершением - когда это происходит (например, на kill
) / var / run / mydaemon.pid * файлы удаляются, и последующий запуск демона завершается успешно.Однако при использовании SIGKILL (kill -9
) у меня нет возможности вызвать context.close()
, и файлы / var / run остаются.В этом случае при следующем запуске моей программы она не запустится успешно - исходный процесс вернется, но демонизированный процесс блокируется в context.open()
.
Кажется, что python-daemon должен был заметить, чтоесть файл pid для процесса, который больше не существует, и очищает его, но этого не происходит.Я должен делать это вручную?
Примечание: я не использую with
, потому что этот код работает на 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()