Não está vendo logs para o programa gerenciado pelo systemd

2

Estou usando o systemd para gerenciar um programa no Ubuntu 16. Não consigo obter os logs do programa para a saída em journalctl ou /var/log/syslog . A configuração do journald é o padrão, que deve encaminhar todas as mensagens de log < depurar para o syslog, pelo menos. Aqui está o conf jornald:

>> 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

A definição do programa é:

[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

Quando faço uma chamada de print no programa, não vejo nenhuma saída em journalctl ou /var/log/syslog . Parece que os logs não estão atingindo journalctl , que é o primeiro problema, mas não entendo como alterar a configuração para obtê-los. Se eu executar o programa manualmente ( python3.5 catcher.py ) de um shell, vejo a saída de impressão no console.

Eu tentei executar a alteração do ExecStart para usar python3.5 -u para não armazenar em buffer o stdout, mas isso não funcionou. Também tentei alterar a configuração de journald.conf ForwardToConsole para yes e reiniciei o systemd-journald service.

Qualquer ajuda seria apreciada.

    
por lps 04.10.2016 / 20:42

1 resposta

2

Eu resolvi isso usando o pacote python-systemd conforme descrito em este artigo sobre stackoverflow . Aqui está a essência disso:

import logging
from systemd.journal import JournalHandler

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

Observação: você precisará instalar o pacote do sistema operacional de python-systemd (por exemplo, apt-get install python-systemd no Ubuntu), não o pacote pip. Aparentemente eles são diferentes.

    
por 20.10.2016 / 00:27