SystemD 每單位 LogRateLimitIntervalSec 不起作用?
SystemD 日誌根據
RateLimitIntervalSec
和RateLimitBurst
全域配置選項限制記錄的消息。有可能使用LogRateLimitIntervalSec
和LogRateLimitBurst
指令更改每個特定單元/服務的這些值。不幸的是,我無法使這些按服務選項起作用。我希望您能幫助我找出我做錯了什麼或確認 systemd 有問題。我的環境:
# uname -srvmpio Linux 4.18.0-193.14.2.el8_2.x86_64 #1 SMP Sun Jul 26 03:54:29 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux # cat /etc/centos-release CentOS Linux release 8.2.2004 (Core) # systemctl --version systemd 239 +PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=legacy # rsyslogd -v rsyslogd 8.1911.0-3.el8 (aka 2019.11)
確保將全域日誌限制保留為預設值
/etc/systemd/journald.conf
:[Journal] #RateLimitIntervalSec=30s #RateLimitBurst=10000
如果需要進行任何更改,請重新啟動
systemctl restart systemd-journald
準備測試腳本
/root/test.sh
:#!/bin/bash for i in {1..1000000} do echo "Hello world $i" done
準備測試服務單元
/root/test.service
:[Unit] Description=Test limit service [Service] Type=simple WorkingDirectory=/root ExecStart=/root/test.sh StandardOutput=syslog StandardError=syslog SyslogIdentifier=test LogRateLimitIntervalSec=0 LogRateLimitBurst=0 [Install] WantedBy=multi-user.target
通過更改確保 rsyslog 速率限制已關閉
/etc/rsyslog.conf
:module(load="imjournal" StateFile="imjournal.state" Ratelimit.Interval="0")
通過創建配置測試服務日誌文件位置
/etc/rsyslog.d/test.conf
:if ($programname == 'test') then { action( type="omfile" File="/root/test.log" ) stop }
重啟 rsyslog:
systemctl restart rsyslog
安裝測試服務:
# systemctl enable /root/test.service
驗證測試服務速率限制設置(
LogRateLimitIntervalSec
內部儲存為LogRateLimitIntervalUSec
):# systemctl show --property LogRateLimitIntervalUSec test.service --no-pager LogRateLimitIntervalUSec=0 # systemctl show --property LogRateLimitBurst test.service --no-pager LogRateLimitBurst=0
啟動服務:
systemctl start test.service
我的結果:
- /root/test.log 停在
Hello world 12500
journalctl -u test.service --no-pager
停在Hello world 12500
- /var/log/messages 報告(有時不記錄此消息)
systemd-journald[304398]: Suppressed 982500 messages from test.service
我還確認將全域日誌設置更改為(並重新啟動 systemd-journald):
[Journal] RateLimitIntervalSec=0 RateLimitBurst=0
沒有預期的速率限制。
在這一點上我一無所知。甚至試圖分析 systemd 原始碼,但這超出了我的想像。如果有人至少會重新創建我的步驟並報告結果,這將有助於在 systemd Github 問題跟踪器上報告這一點。
謝謝。
中的
RateLimitIntervalSec=, RateLimitBurst=
部分man journald.conf
說:要關閉任何類型的速率限制,請將任一值設置為 0。
但是,您無法
LogRateLimitIntervalSec=, LogRateLimitBurst=
在man systemd.exec
. 有了您test.service
,您可以輕鬆驗證將其設置為其他內容,而不是0
按預期工作。