我有以下新的 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。
答案1
最有可能的是,日志文件的创建时间不到一天和/或在最后一天内已轮换,并且 logrotate 会记住历史记录。
如果你添加它,-f
如果你确实想要的话,它会强制旋转(尽管不能 100% 确定它如何与 交互-d
)。
您可以查看历史记录,位置取决于您的发行版,但可能是/var/lib/logrotate/status
。该文件显示日志上次轮换的时间。
答案2
第一次使用新的日志配置运行 logrotate 时,它不知道上次日志轮转发生的时间,因此它只是写入一个状态行,/var/lib/logrotate/status
以表明它今天运行。
当它在第二天运行时,它会发现日志已经存在一天了,并按预期轮换它。如果您不想等待,请编辑 logrotate 的状态文件并将日志的状态日期恢复到前一天。
当您手动运行 logrotate 时,它将按预期工作
答案3
dateext
有时,即使您手动运行 logrotate,如果您在同一天执行此操作并且默认值不包含秒(例如-%Y%m%d
),这也将不起作用。即使您修改 logrotate 的状态文件或使用 size 指令(例如size 200M
)也不会。至少在 CentOS 6 上,logrotate 将无法轮换您的日志文件,因为它已经存在。
要解决此问题,您需要使用,dateformat
代替dateext
, 其值如下:%Y%m%d%s
。
请参阅man logrotate
获取更多信息。
答案4
请注意,通过运行
logrotate -vdf /etc/logrotate.conf
尽管仅模拟该事件,但该事件将被记录/var/lib/logrotate.status
,后续 logrotate 运行将回复上述内容
log does not need rotating