it-swarm.cn

Logrotate:“日志不需要旋转”为什么?

我有以下新的logrotate配置:

/var/log/nexus/nexus.log {
    rotate 7
    missingok
    compress
    delaycompress
    copytruncate
    daily
}

当我运行logrotate -d nexus,我得到以下信息:

reading config file nexus
reading config info for /var/log/nexus/nexus.log

Handling 1 logs

rotating pattern: /var/log/nexus/nexus.log  after 1 days (7 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/nexus/nexus.log
  log does not need rotating

我的/ var/log/nexus /文件夹包含以下内容:

nexus.log
oldlogs.tar.gz

为什么LogRotate不旋转nexus.log文件?我期望的是nexus.log文件将被截断,并且将创建一个新文件,例如nexus.log-201106241000。

60
Rich

日志文件最有可能不到一天,并且/或者在最后一天之内已被轮换,logrotate会记住历史记录。

如果您添加-f,则在您确实愿意时会强制旋转(尽管不能100%确认它如何与-d交互)。

您可以查看历史记录,位置取决于您的分布,但可能是/var/lib/logrotate/status。该文件显示了上次轮换日志的时间。

68
EightBitTony

第一次使用新的日志配置运行logrotate时,它不知道最后一次日志轮换发生的时间,因此它只是在/var/lib/logrotate/status中写入状态行,以表示它今天已运行。

当它随后在第二天运行时,它会发现日志已使用了一天,并按预期方式对其进行了轮换。如果您不想等待,请编辑logrotate的状态文件,然后将日志的状态日期返回到前一天。

手动运行logrotate时,它将按预期工作

61
Tony Sweeney

有时,即使您手动运行logrotate,如果您在同一天执行logrotate并且具有dateext且默认值不包含senconds(例如-%Y%m%d)。即使您修改了logrotate的状态文件或使用size指令(例如size 200M)。至少在CentOS 6上,logrotate将无法旋转您的日志文件,因为它已经存在。

要解决此问题,您需要使用dateformat而不是dateext,其值应为:%Y%m%d%s

man logrotate 欲获得更多信息。

5
emerino

通过运行提防

logrotate -vdf /etc/logrotate.conf

该事件,尽管仅模拟将记录到/var/lib/logrotate.status和随后的logrotate运行将回复所提及的内容

log does not need rotating
1
helvete