Записывать вывод Python Systemd в файл журнала - PullRequest
0 голосов
/ 22 ноября 2018

Я запускаю свой сценарий 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 получает вывод в journalctl,Я не хочу этогоЯ хочу получить доступ к этому журналу через другой сценарий, который не запускается с правами администратора.

Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 14 июня 2019

Ответ прост: logging.info не появится, но появится logging.warn (и выше).

0 голосов
/ 30 ноября 2018

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

After идет в секции [Unit], а не в [Install].

Однажды я установил, что твой сценарий работает на меня.Другие вещи, которые нужно проверить:

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

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

...