Tengo un fragmento de Python simple administrado por un systemd
servicio que inicia sesión en rsysogd
daemon donde he definido un archivo de configuración para ponerlo en un servidor syslog con un formato que he definido. Esto está funcionando bien hasta ahora.
En el siguiente código, paso el argumento como la cadena que quiero iniciar sesión en el servidor. Estoy usando este código a continuación como un módulo y lo uso solo para iniciar sesión, el script real lo usa para fines de registro.
#!/usr/bin/env python
import syslog
import sys
syslog.openlog(facility=syslog.LOG_LOCAL0)
syslog.syslog(syslog.LOG_INFO, sys.argv[1])
Dado que la aplicación es administrada por systemd
está haciendo una copia del syslog disponible cuando se ve desde el journalctl -xe
y journalctl -u <my-service>
lo cual no deseo que suceda porque tengo otra información crítica que estoy ingresando en los registros del diario.
La definición del servicio es
[Unit]
Description=Computes device foobar availability status
[Service]
Type=simple
EnvironmentFile=/etc/sysconfig/db_EndPoint
ExecStart=/usr/bin/python /opt/foobar/foobar.py
WatchdogSec=60
RestartSec=10
Restart=always
LimitNOFILE=4096
[Install]
WantedBy=default.target
y en el /etc/systemd/journald.conf
archivo, no he habilitado ninguna de las opciones disponibles. Busqué esta documentación de journald.conf para usar ForwardToSyslog=no
e hice un reinicio de journald
servicio como
systemctl restart systemd-journald
y también reinicié mi unidad de servicio, pero veo que se cierra la sesión en el servidor syslog y también a los registros diarios. ¿Qué opción me falta aquí?
Respuesta aceptada:
Tengo un fragmento de Python simple administrado por un servicio systemd que se registra en el demonio rsys[l]ogd […]
No, no lo has hecho.
Lo que tiene es un servicio que se registra en el diario systemd. El servidor escuchando en el conocido /dev/log
el socket con el que está hablando su programa Python no es rsyslogd
. Es systemd-journald
. rsyslogd
está unido al otro lado de systemd-journald
, y su programa Python no está hablando con él.
A partir de esto, debería ser evidente que la única forma de no enviar cosas a través de systemd-journald
es usar alguna otra ruta a rsyslogd
, no el socket bien conocido que su biblioteca de Python usa por defecto. Todo depende de cómo haya configurado rsyslogd
.
- Es posible que haya activado un servidor UDP con el
imudp
módulo, en cuyo caso podría decirle a su programa de Python que lo use usando una biblioteca de Python diferente que hable con dicho servidor UDP. (La biblioteca syslog de Python está cableada para usar el conocido socket local). - O (y mejor, dado que debe tener cuidado de no abrir un servicio UDP al mundo fuera de su máquina) podría haber dado
rsyslogd
un segundo, no muy conocido,AF_LOCAL
socket para escuchar configurando esto en elimuxsock
configuración del módulo. Nuevamente, tendrá que decirle a su programa de Python que use eso y use una biblioteca de Python diferente.
Lo que hace exactamente en su programa Python está más allá del alcance de esta respuesta.
Lecturas adicionales
- https://unix.stackexchange.com/a/294206/5132