Linux服务停止记录日志

1 投票
1 回答
120 浏览
提问于 2025-04-12 09:22

我有一个正在运行的服务。这个服务会调用一个长时间运行的Python脚本,这个脚本会“打印”一些状态信息。我可以通过 journalctl -u myservice.service 来查看这些状态信息。但是大约过了6个小时后,我就看不到服务的新输出了。

如果我运行 systemctl status myservice.service,我可以确认这个服务仍然在运行。

我怀疑这可能和日志有关,所以我把日志输出的时间间隔从每分钟一次减少到了每10秒一次。结果问题还是出现了,不过这次是在1小时后。因此,看起来我可能遇到了日志空间或日志轮换的问题。有没有人能帮我解决这个问题?

我开始查看 journald.conf 文件,内容大致是这样的。

[Journal]
#Storage=auto
#Compress=yes
#Seal=yes
#SplitMode=uid
#SyncIntervalSec=5m
#RateLimitInterval=30s
#RateLimitBurst=1000
#SystemMaxUse=
#SystemKeepFree=
#SystemMaxFileSize=
#RuntimeMaxUse=
#RuntimeKeepFree=
#RuntimeMaxFileSize=
#MaxRetentionSec=
#MaxFileSec=1month
#ForwardToSyslog=yes
#ForwardToKMsg=no
#ForwardToConsole=no
#ForwardToWall=yes
#TTYPath=/dev/console
#MaxLevelStore=debug
#MaxLevelSyslog=debug
#MaxLevelKMsg=notice
#MaxLevelConsole=info
#MaxLevelWall=emerg
#LineMax=48K

我尝试把内容改成下面这样,然后运行 sudo systemctl restart systemd-journald.service,但没有成功。

[Journal]
#Storage=auto
#Compress=yes
#Seal=yes
#SplitMode=uid
#SyncIntervalSec=5m
#RateLimitInterval=30s
#RateLimitBurst=1000
SystemMaxUse=1G            # Increase to allow more disk space for logging
#SystemKeepFree=
#SystemMaxFileSize=
#RuntimeMaxUse=
#RuntimeKeepFree=
#RuntimeMaxFileSize=
MaxRetentionSec=1month     # Retain journal files for up to one month
MaxFileSec=1week           # Keep individual journal files for up to one week
#ForwardToSyslog=yes
#ForwardToKMsg=no
#ForwardToConsole=no
#ForwardToWall=yes
#TTYPath=/dev/console
#MaxLevelStore=debug
#MaxLevelSyslog=debug
#MaxLevelKMsg=notice
#MaxLevelConsole=info
#MaxLevelWall=emerg
#LineMax=48K

有什么想法吗?

1 个回答

2

我遇到过类似的问题,我的服务日志因为在一个时间段内收到的消息太多而被抑制了。但是如果这个时间段总是正好是6小时……这就有点奇怪了。
有没有可能是某个地方的RateLimitInterval(限制时间间隔)或RateLimitBurst(限制突发量)配置错了?你有没有在系统日志中看到任何抑制消息?比如说 systemd-journal[xxxx]: Suppressed <number> messages from <your_service>.
这很奇怪,因为我觉得你这些参数的默认值是好的,跟你的问题不太符合……也许你的服务自己有设置日志的速率限制,比如 LogRateLimitIntervalSec= 和/或 LogRateLimitBurst=?因为如果是这样的话,这些值会覆盖在journald配置中设置的值。
如果你看到了抑制消息,你可以尝试设置

RateLimitInterval=0s
RateLimitBurst=0

来完全禁用它们(这只是为了调试:之后你应该再调整一下),也许你还可以增加

RuntimeMaxUse

的大小,如果你觉得系统默认的SystemMaxUse和RuntimeMaxUse配置的八分之一不够的话,你也可以增加

SystemMaxFileSize
RuntimeMaxFileSize

(参考 https://www.freedesktop.org/software/systemd/man/latest/journald.conf.html

撰写回答