Записывать вывод Python Systemd в файл журнала

1

Я запускаю свой скрипт 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
systemd

2 ответа

0

Ответ прост: logging.info не будет отображаться, но будет отображаться logging.warn (и выше).

0

Сначала проверьте, что ваша служба запущена вообще: systemctl status MyService должна показывать вам ошибки.

After войдите в раздел [Unit], а не в [Install].

Как только я исправил, что ваш скрипт работал для меня. Другие вещи для проверки:

  • Является ли путь к файлу журнала абсолютным путем?
  • У пользователя, запускающего службу, есть разрешения на запись там?

Я бы порекомендовал просто вести журнал в stdout, в журнал, так что вам не нужно беспокоиться о том, чтобы journalctl файл журнала, сколько места он занимает и т.д. Также journalctl действительно хорош для запросов к журналам. Вы должны иметь доступ к журналу как к некорневому корню, либо к тому же пользователю, что и к скрипту, либо находясь в групповом systemd-journal.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню