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

Ric*_*ich 63 logrotate

我有以下新的 logrotate 配置:

/var/log/nexus/nexus.log {
    rotate 7
    missingok
    compress
    delaycompress
    copytruncate
    daily
}
Run Code Online (Sandbox Code Playgroud)

当我运行时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
Run Code Online (Sandbox Code Playgroud)

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

nexus.log
oldlogs.tar.gz
Run Code Online (Sandbox Code Playgroud)

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

Eig*_*ony 73

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

如果你添加-f它会强制旋转,如果你真的想要(虽然不是 100% 确定它是如何与 交互的-d)。

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

  • 在 FreeBSD 中,它是 /var/run/logrotate.status (4认同)
  • `-d` + `-f` 使 logrotate 报告“需要旋转”所有文件,即使是不匹配的文件 (2认同)

小智 68

第一次使用新的日志配置运行 logrotate 时,它​​不知道上次日志轮换是什么时候发生的,因此它只会写入一个状态行,/var/lib/logrotate/status表示今天运行的效果。

当它随后在第二天运行时,它会看到日志是一天前的,并按预期轮换它。如果您不想等待,请编辑 logrotate 的状态文件并将日志的状态日期回滚到前一天。

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


小智 5

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

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

有关man logrotate更多信息,请参阅。