我刚刚发现了一个我不明白的问题(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'.
似乎我对没有进一步的错误消息感到困惑,假设这是由于
logrotate
不再执行引起的。但是,当
postrotate
操作失败时,这意味着旧的日志文件被重命名,但是(由于 中的失败postrotate
)守护程序继续写入重命名的文件(而不是被触发postrotate
创建新的写入文件)。反过来,这意味着
logrotate
找不到要轮换的日志文件,因此也意味着不postrotate
执行任何操作。所以最后当 nopostrotate
执行时,它不会触发错误,所以 syslog 中没有消息。