Я использую 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. Видимо они разные.