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

问题描述 投票:0回答:7

我的计算机将多个java进程作为systemd服务运行。systemd日志在syslog中累积,最终导致磁盘空间不足。如何将 systemd 服务启动的日志重新定向到 /dev/null ,以便它不会累积在 syslog 中。由于这个问题,机器不断耗尽磁盘空间。但是,我需要能够使用journalctl查看systemd服务日志。我发现的可能的解决方案是:

1.通过设置修改/etc/systemd/journald.conf中的配置 'ForwardToSyslog=否'

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

但是第一个解决方案完全停止了发送到 syslog 的所有日志,而解决方案 2 不起作用。我希望停止仅转发来自 systemd 服务的日志消息。

linux ubuntu logging systemd syslog
7个回答
4
投票

StandardOutput=null 的第二个选项应该可以工作。我认为您需要的是通过添加 StandardError=null 将 STDERR 重定向到 /dev/null。 总结 - 在您的 *.service 文件中应该有两行:

[Service]
StandardOutput=null
StandardError=null

有关更多详细信息,请参阅 SYSTEMD.EXEC(5) 手册页。


3
投票

如果您的服务正在记录到文件,则消息将不会附加到 systemd syslog。

例如:

[Service]
StandardOutput=append:/var/log/python-script-stdout.log
StandardError=append:/var/log/python-script-stderr.log

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

如果您想在每次服务启动时截断日志,请将

append:
替换为
file:


3
投票

类似地,在运行 systemd-219-42.el7_4.1.x86_64 的 Redhat 7.4 机器上,我无法使用

ForwardToSyslog=no
中的
/etc/systemd/journald.conf
设置关闭日志重定向。

我成功地设置了

MaxLevelSyslog=warning
,它删除了转发到 rsyslog 的所有 INFO 和 DEBUG 级别消息。


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 手册以获取更多信息


0
投票

或者,您可以使用

journalctl
命令来限制日志的大小。您可以通过将以下行添加到
/etc/systemd/journald.conf
来将日志的大小限制为特定大小:

SystemMaxUse=10M

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


0
投票

创建一个日志命名空间并更改该命名空间的

ForwardToSyslog
。基本上与https://unix.stackexchange.com/a/729452/6900

相同

创建

nosyslog
期刊命名空间:

cd /etc/systemd
cp journald.conf [email protected]
$EDITOR [email protected]

设置

ForwardToSyslog=no
。将您的服务编辑为

[Service]
LogNamespace=nosyslog

然后

sudo systemctl daemon-reload
sudo systemctl restart name-of-unit

文档:https://www.freedesktop.org/software/systemd/man/latest/journald.conf.html

© www.soinside.com 2019 - 2024. All rights reserved.