Я запускаю приложение python (версия exe, созданная с помощью pyInstaller) из службы Windows (созданной в python, преобразованной в exe с помощью pyinstaller и установленной с помощью sc), но файлы журнала, созданные моим приложением, не вращаются.
Итак, я фактически использовал файл logger.conf, который имеет конфигурацию логгера с вращением FileHandler, чтобы вращать файл после каждых 10 КБ (для целей тестирования).Конфигурация в файле conf выглядит следующим образом:
...
[handler_fileRotationHandler]
class=logging.handlers.RotatingFileHandler
level=NOTSET
formatter=simpleFormatter
args=('<absolute path of log file>','a',10240,5)
...
Внутри кода Python я использую эту конфигурацию для создания и поворота файлов журнала.
Вот список случаев, когда работает правильная ротация файла журнала:
1- Версия python запущена с использованием команды python
2- Версия exe (созданас использованием PyInstaller) отлично работает при двойном щелчке мыши напрямую
3- версия exe при запуске из службы Windows, также созданной в python, если служба установлена с помощью команд python, как показано ниже:
MyService.py install
Теперь вот когда это не работает:
Я конвертирую код службы Windows в exe (снова использую pyInstaller) и устанавливаю службу с помощью команды sc, используя следующую команду:
sc create MyService binPath= "<absolute path of service exe file>"
При запуске с использованием этой службы приложение работает нормально, и файл журнала также создается, но после достижения максимального размера, определенного в fileHandler для журнала, он не создает другой файл журнала и, таким образом, застревает только в терминах журнала.Приложение продолжает работать отлично, только журналы не записываются.
Вот что я пробовал и наблюдал:
1- В обоих случаях я запустил свойверсия приложения exe с использованием команды subprocess.Popen (), и мое приложение не имеет какого-либо элемента пользовательского интерфейса, поэтому оно отлично работает в сеансе Windows 0 в фоновом режиме.Просто для информации, в случае, если это уместно.
2- Если я удаляю существующие операторы журнала и пустой файл журнала, журналы начинают регистрироваться в файле и снова останавливаются при достижении максимального размера.
3- У меня естьиспользовал команду os.getcwd (), чтобы получить каталог, в котором мое приложение запускается при запуске, в обоих случаях, для которых я нашел следующие каталоги:
в службе python, установленной с использованием случая python, приложение запускается в "C: \ Users \\AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ win32 "
, в то время как в версии exe, запущенной из службы, установленной с использованием сценария sc, приложение работает в" C: \ Windows \ system32 "
Хотя в обоих случаях файл logging.conf содержит путь создания файла журнала, поэтому я предполагаю, что это не должно быть проблемой (фактически файл журнала создается в ожидаемом месте, просто ротация файлов не работает,так что это, я думаю, не имеет значения)
Мне нужно использовать версию exe, установленную только sc, а не версию службы python.Как решить эту проблему, любая помощь или руководство или направление приветствуется.