systemd 和 logrotate:systemd 日志中缺少错误消息

systemd 和 logrotate:systemd 日志中缺少错误消息

我刚刚发现一个我不明白的问题(SLES15 SP2):

我错误地配置了一项logrotate服务(在/etc/logrotate.d)。在 SLES 15 中,每天logrotate.service都会触发。logrotate.timer

但是,我的错误配置的服务似乎只记录一次错误消息(这是我很长时间没有发现问题的主要原因)。

有人能解释一下发生了什么吗?其他 logrotate 服务似乎已执行(我不确定)。

一些细节

logrotate 的错误是由失败的操作引起的,具体来说是发送到正在运行的进程postrotate失败。SIGHUP

系统日志消息:

Dec 18 00:00:20 h16 systemd[1]: Starting Rotate log files...
Dec 18 00:00:20 h16 logrotate[41799]: Failed to kill unit \x7b__SERVICE__\x7d.service: Unit \x7b__SERVICE__\x7d.service is not loaded.
Dec 18 00:00:20 h16 logrotate[41799]: error: error running shared postrotate script for '/var/log/iotwatch/MD10/*.log '
Dec 18 00:00:20 h16 systemd[1]: logrotate.service: Main process exited, code=exited, status=1/FAILURE
Dec 18 00:00:20 h16 systemd[1]: Failed to start Rotate log files.
Dec 18 00:00:20 h16 systemd[1]: logrotate.service: Unit entered failed state.
Dec 18 00:00:20 h16 systemd[1]: logrotate.service: Failed with result 'exit-code'.

答案1

我似乎对没有进一步的错误消息感到困惑,以为这是由于logrotate不再执行造成的。

然而当postrotate操作失败时,这意味着旧的日志文件已被重命名,但是(由于失败postrotate)守护进程继续写入重命名的文件(而不是被触发postrotate创建一个新的文件来写入)。

反过来,这意味着logrotate找不到要轮换的日志文件,因此也意味着postrotate不会执行任何操作。因此,最终当postrotate执行 no 时,它不会触发错误,因此系统日志中不会有任何消息。

相关内容