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


57

我有以下新的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。


另外,请记住,当您使用-d选项时,它不会旋转日志。它向您显示了在没有选项的情况下它将如何运行,例如游戏计划。当我以为我可以看到它们旋转时,使我有些头疼,然后它们还在那里。
Maxwell Flanders

Answers:


64

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

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

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


4
在FreeBSD中,它是/var/run/logrotate.status
kaleissin11年

还要检查状态文件位置调用中是否可能使用-s参数
JGurtz 2014年

2
-d+ -f使所有文件的logrotate报告“需要旋转”,即使是不匹配的文件也是如此
Fluffy 2015年

除此之外,将状态文件中的日期编辑为比轮换策略还早,足以说服logrotate它在再次运行时需要轮换日志。
Centimane

在CentOS上,我修改了/var/lib/logrotate.status以使logrotate工作。正如ThreeBitTony所指出的,每日logrotate会记住历史。除非文件在历史记录中已经有过去的日期,否则logrotate不会旋转文件。
Mark

58

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

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

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


5

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

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

请参阅man logrotate以获取更多信息。


1

通过运行提防

logrotate -vdf /etc/logrotate.conf

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

log does not need rotating

1
我无法在Ubuntu(16.04和17.04)上重现它。如果使用“ /var/lib/logrotate.status”,则必须使用另一个发行版。Ubuntu日志到“ / var / lib / logrotate / status”。
PhilippClaßen17年

2
@PhilippClaßen:您说得对,这/var/lib/logrotate.status是在调试Docker容器中Alpine linux 3.5上Logrotate 3.10的配置时观察到的(状态文件位于)。但是问题定义中没有Ubuntu标志,是吗?
helvete '17

1
是的,没关系。我只想提到它,因为Ubuntu非常流行。我想很多人读这个问题是因为他们想修复自己的服务器,该服务器如今通常与Ubuntu一起运行。
PhilippClaßen17年

1
好,是的。为了完整/var/lib/logrotate/logrotate.status
起见
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.