我有一个由systemd
服务管理的简单 Python 片段,它记录到rsysogd
我定义了一个配置文件的守护进程,以我定义的格式将其放入系统日志服务器。到目前为止,这工作正常。
在下面的代码中,我将参数作为要登录服务器的字符串传递。我将下面的代码用作模块并单独使用它来记录,实际的脚本将其用于记录目的。
#!/usr/bin/env python
import syslog
import sys
syslog.openlog(facility=syslog.LOG_LOCAL0)
syslog.syslog(syslog.LOG_INFO, sys.argv[1])
由于应用程序是由systemd
它管理的,因此当从journalctl -xe
和journalctl -u <my-service>
我不希望发生这种情况时,它会提供 syslog 的副本,因为我有其他关键信息,我正在记录日志日志。
服务定义是
[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
在/etc/systemd/journald.conf
文件中,我没有启用任何可用的选项。我查看了这个journald.conf文档以使用ForwardToSyslog=no
并重新启动journald
服务
systemctl restart systemd-journald
并且还重新启动了我的服务单元,但我看到日志输出到系统日志服务器以及日志日志。我在这里缺少什么选项?
不,你没有。
您拥有的是一个记录到 systemd 日志的服务。
/dev/log
侦听Python 程序正在与之通信的知名套接字的服务器不是rsyslogd
. 它是systemd-journald
。 附加到 的另一侧rsyslogd
,并且您的 Python 程序没有与它交谈。systemd-journald
由此可见,不发送内容的唯一方法
systemd-journald
是使用其他路由到rsyslogd
,而不是Python 库默认使用的众所周知的套接字。这一切都取决于您的配置方式rsyslogd
。imudp
,在这种情况下,您可以通过使用与此类 UDP 服务器通信的不同 Python 库来告诉您的 Python 程序使用它。(Python syslog 库硬连线以使用众所周知的本地套接字。)rsyslogd
第二个不为人知的AF_LOCAL
套接字来监听。imuxsock
同样,您必须告诉您的 Python 程序使用它并使用不同的 Python 库。您在 Python 程序中所做的具体操作超出了此答案的范围。
进一步阅读