我的计算机将多个java进程作为systemd服务运行。systemd日志在syslog中累积,最终导致磁盘空间不足。如何将 systemd 服务启动的日志重新定向到 /dev/null ,以便它不会累积在 syslog 中。由于这个问题,机器不断耗尽磁盘空间。但是,我需要能够使用journalctl查看systemd服务日志。我发现的可能的解决方案是:
1.通过设置修改/etc/systemd/journald.conf中的配置 'ForwardToSyslog=否'
2.在systemd服务文件本身中添加StandardOutput=null
但是第一个解决方案完全停止了发送到 syslog 的所有日志,而解决方案 2 不起作用。我希望停止仅转发来自 systemd 服务的日志消息。
StandardOutput=null 的第二个选项应该可以工作。我认为您需要的是通过添加 StandardError=null 将 STDERR 重定向到 /dev/null。 总结 - 在您的 *.service 文件中应该有两行:
[Service]
StandardOutput=null
StandardError=null
有关更多详细信息,请参阅 SYSTEMD.EXEC(5) 手册页。
如果您的服务正在记录到文件,则消息将不会附加到 systemd syslog。
例如:
[Service]
StandardOutput=append:/var/log/python-script-stdout.log
StandardError=append:/var/log/python-script-stderr.log
将所有消息(stdout 和 stderr)仅转发到各自的文件路径。
如果您想在每次服务启动时截断日志,请将
append:
替换为 file:
。
类似地,在运行 systemd-219-42.el7_4.1.x86_64 的 Redhat 7.4 机器上,我无法使用
ForwardToSyslog=no
中的 /etc/systemd/journald.conf
设置关闭日志重定向。
MaxLevelSyslog=warning
,它删除了转发到 rsyslog 的所有 INFO 和 DEBUG 级别消息。
您可以配置 rsyslog 以忽略来自特定应用程序的日志:
# cat /etc/rsyslog.d/mydaemon.conf
if $programname == 'mydaemon' then {
stop
}
这将导致:
您仍然可以使用“syslog”将日志从服务重定向到/dev/null。在您的系统文件中尝试:
[service]
SyslogIdentifier=<service-name>
StandardOutput=null
SyslogFacility=local7
同时,检查 syslog 守护程序是否配置为使用 local7 设施接收日志。在 rsyslog 配置文件中确保:
local7.* /dev/null
journalctl 应该仍然可以工作。
查看 systemd 手册以获取更多信息
或者,您可以使用
journalctl
命令来限制日志的大小。您可以通过将以下行添加到 /etc/systemd/journald.conf
来将日志的大小限制为特定大小:
SystemMaxUse=10M
这会将您的日志限制为 10 MB。
创建一个日志命名空间并更改该命名空间的
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