Я запускаю свой скрипт python как службу systemd, он определяется в следующем файле .service
:
[Unit]
Description=MyService
After=multi-user.target
[Service]
Type=idle
ExecStart=/usr/bin/python3 /home/username/projects/website_notifier/run_service.py
[Install]
After=multi-user.target
В моем файле run_service.py я регистрирую вывод с помощью модуля ведения журнала:
import logging
logging.basicConfig(filename=settings['log_file_name'], level=logging.INFO)
logging.info("Starting notifier service at " + str(datetime.utcnow()))
Проблема в том, что эта информация не регистрируется в моем файле журнала при запуске. Я запускаю свой файл через systemctl
Теперь я знаю, что в общем случае systemd получает вывод в журнал, я не хочу этого. Я хочу иметь доступ к этому журналу через другой скрипт, который не работает с правами администратора.
Как я могу это сделать?
Ответ прост: logging.info
не будет отображаться, но будет отображаться logging.warn
(и выше).
Сначала проверьте, что ваша служба запущена вообще: systemctl status MyService
должна показывать вам ошибки.
After
войдите в раздел [Unit]
, а не в [Install]
.
Как только я исправил, что ваш скрипт работал для меня. Другие вещи для проверки:
Я бы порекомендовал просто вести журнал в stdout, в журнал, так что вам не нужно беспокоиться о том, чтобы journalctl
файл журнала, сколько места он занимает и т.д. Также journalctl
действительно хорош для запросов к журналам. Вы должны иметь доступ к журналу как к некорневому корню, либо к тому же пользователю, что и к скрипту, либо находясь в групповом systemd-journal
.