我刚刚发现一个我不明白的问题(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 时,它不会触发错误,因此系统日志中不会有任何消息。