防止systemd服务日志转发到syslog,而不影响发送到syslog的其他服务日志。

20
我的电脑运行了多个Java进程作为systemd服务。systemd日志最终会在syslog中累积导致磁盘空间不足。如何将由systemd服务启动的日志重定向到/dev/null,以便它不会在syslog中积累。由于这个问题,机器经常出现磁盘空间不足的情况。但是,我需要能够使用journalctl查看systemd服务日志。我找到的可能解决方案有:

1.修改/etc/systemd/journald.conf配置,设置'ForwardToSyslog=no'

2.在systemd服务文件本身中添加StandardOutput=null

然而,第一个解决方案完全停止了发送到syslog的所有日志,而第二个解决方案则没有起作用。我希望只停止转发来自systemd服务的日志消息。

6个回答

4
第二种选项,即StandardOutput=null,应该可以工作。我认为你需要将标准错误(STDERR)也重定向到/dev/null,通过添加StandardError=null来实现。 概括一下,在*.service文件中应该有两行代码:
[Service]
StandardOutput=null
StandardError=null

请参考 SYSTEMD.EXEC(5) 手册获取更多细节。


10
这个解决方案会完全禁用日志记录,所以你不能再通过 journalctl -u <unit> -f 来查看它们了 :/ 有没有一种方法可以保留 journald,但不将其转发到 syslog? - Konstantine Rybnikov
我们配置了rsyslog来记录给定服务的日志,也记录我们特定位置的日志。在禁用此日志记录后,“journalctl”停止工作,但我们至少可以在我们期望的位置获得日志。 - 32cupo

3
同样,在运行systemd-219-42.el7_4.1.x86_64的Redhat 7.4系统上,我无法通过在/etc/systemd/journald.conf中设置ForwardToSyslog=no来关闭日志重定向。
相反,我成功地设置了MaxLevelSyslog=warning,这样就可以删除所有转发到rsyslog的INFO和DEBUG级别消息。

3
如果您的服务正在记录到文件中,那么这些消息将不会附加到systemd syslog中。
例如:
[Service]
StandardOutput=append:/var/log/python-script-stdout.log
StandardError=append:/var/log/python-script-stderr.log

将所有消息(stdout 和 stderr)仅转发到它们各自的文件路径。

如果您想在每次服务启动时截断日志,请将 append: 替换为 file:


2
您可以配置rsyslog忽略特定应用程序的日志:
# cat /etc/rsyslog.d/mydaemon.conf 
if $programname == 'mydaemon' then {
    stop
}

这将导致:
  1. 您将在日志和系统日志中看到systemd生成的有关守护程序启动/停止/重新加载等消息。
  2. 您将仅在日志中(以及应用程序直接编写的自定义日志文件中,如果有的话)看到守护程序生成的消息。

1

您仍然可以使用“syslog”将服务日志重定向到/dev/null。在您的系统文件中尝试:

[service]
SyslogIdentifier=<service-name>
StandardOutput=null
SyslogFacility=local7

同时,检查syslog守护程序是否配置为接收带有local7设施的日志。在rsyslog配置文件中确保:

local7.*    /dev/null

journalctl 应该仍在工作。

查看systemd 手册以获取更多信息。


这对我很有效,不过更详细地说明如何检查local7设施可能会更好。 - xCovelus
1
检查syslog守护程序是否已配置为通过在rsyslog配置文件中查找“local7.”来接收日志--这告诉syslog守护程序处理所有具有local7设施的日志消息--“local7. / var / log / local7.log”表示syslog守护程序已配置为处理具有local7设施的日志并将其保存到/var/log/local7.log文件中--更新配置文件以将具有local7设施的日志重定向到/dev/null“local7.* / dev/null”-- syslog守护程序丢弃所有具有local7设施的日志,包括来自systemd服务的日志--希望这有所帮助。 - Lemonina

0

或者,您可以使用journalctl命令来限制日志的大小。您可以通过将以下行添加到/etc/systemd/journald.conf来限制日志的大小:

SystemMaxUse=10M

这将限制您的日志大小为10 MB。


您的解决方案无法阻止systemd服务日志转发到syslog。 - Binar Web

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接