Регистрация в Python - дескриптор файла, ушедший в процесс демона - PullRequest
0 голосов
/ 13 ноября 2018

Мой вопрос такой же, как здесь: Демон регистрации Python уничтожает дескриптор файла но решение не работает для меня.

Задача
Я получаю OSError: [Errno 9] Bad file descriptor ошибку из строки logger.info("some log"), которая запускается в daemon.DaemonContext() (из python-daemon)

Я убедился, что сохранил дескриптор файла logging.FileHandler в процессе демона

        app = App()
        context = daemon.DaemonContext(
            working_directory=PROCESS_HOME,
            umask=0o002,
            pidfile=pidfile,
            stdout=sys.stdout, # <- only there for debugging
            stdin=sys.stdin,
            stderr=sys.stderr,
            files_preserve=[app.logger_fh_.stream],
            signal_map={
                signal.SIGTERM: app.stop,
                signal.SIGHUP: app.stop,
                signal.SIGUSR1: app.refresh
            }
        )

        # any calls to app.logger.info(...) work here

        with context:
           # now calls to app.logger.info(...) fail
           app.start()

Где регистратор был настроен следующим образом

        # inside App()
        logger = logging.getLogger(__name__)
        logger.setLevel(logging.DEBUG)
        formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

        fh = logging.FileHandler(logging_path)
        fh.setFormatter(formatter)
        fh.setLevel(logging.DEBUG)
        logger.addHandler(fh)

        self.logger = logger
        self.logger_fh_ = fh

EDIT

В документации написано

Элементы списка [т.е. files_preserve] - файловые дескрипторы (возвращаемые методом fileno () файлового объекта) или файловые объекты Python. Каждый из них указывает файл, который нельзя закрывать при запуске демона.

Итак, я добавил app.logger_fh_.stream.fileno(). Проблема сохраняется, хотя

Спасибо за помощь

...