Назад | Перейти на главную страницу

Не отображаются журналы для программы, управляемой systemd

Я использую systemd для управления программой в Ubuntu 16. Кажется, я не могу получить журналы из программы для вывода в journalctl или /var/log/syslog. По умолчанию используется конфигурация journald, которая должна пересылать все сообщения журнала <debug, по крайней мере, в syslog. Вот журнал journald conf:

>> cat /etc/systemd/journald.conf
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See journald.conf(5) for details.

[Journal]
#Storage=auto
#Compress=yes
#Seal=yes
#SplitMode=uid
#SyncIntervalSec=5m
#RateLimitInterval=30s
#RateLimitBurst=1000
#SystemMaxUse=
#SystemKeepFree=
#SystemMaxFileSize=
#SystemMaxFiles=100
#RuntimeMaxUse=
#RuntimeKeepFree=
#RuntimeMaxFileSize=
#RuntimeMaxFiles=100
#MaxRetentionSec=
#MaxFileSec=1month
#ForwardToSyslog=yes
#ForwardToKMsg=no
#ForwardToConsole=no
#ForwardToWall=yes
#TTYPath=/dev/console
#MaxLevelStore=debug
#MaxLevelSyslog=debug
#MaxLevelKMsg=notice
#MaxLevelConsole=info
#MaxLevelWall=emerg

Определение программы:

[Unit]
Description=My Program
After=network.target

[Service]
User=vagrant
Restart=always
WorkingDirectory=/vagrant/transporter
Environment=PORT=8080
ExecStart=/usr/bin/python3.5 catcher.py

Когда я делаю print вызов в программе я не вижу вывода в journalctl или /var/log/syslog. Похоже, что логи не попадают journalctl, что является первой проблемой, но я не понимаю, как изменить конфигурацию, чтобы получить их. Если я запустил программу вручную (python3.5 catcher.py) из оболочки я вижу вывод на печать на консоли.

Я попытался изменить ExecStart на использование python3.5 -u чтобы не буферизовать стандартный вывод, но это не сработало. Я также пробовал изменить journald.conf ForwardToConsole установив значение "да", и перезапустил systemd-journald служба.

Любая помощь будет оценена.

Я решил это, используя python-systemd пакет-обертка, как описано в эта статья о stackoverflow. Вот его суть:

import logging
from systemd.journal import JournalHandler

log = logging.getLogger('demo')
log.addHandler(JournalHandler())
log.setLevel(logging.INFO)
log.info("sent to journal")

Обратите внимание: вам необходимо установить системный пакет ОС python-systemd (например. apt-get install python-systemd в Ubuntu), а не пакет pip. Видимо они разные.