logrotate 无法按预期使用我的自定义日志

logrotate 无法按预期使用我的自定义日志

我打开了 mysql 通用日志,由于它增长得非常快,我想到每天使用 logrotate,所以我昨天下午 2 点左右创建了日志,日志如下所示:

-rw-rw----  1 mysql adm  1751348 Jun 16 11:55 general.log

我向 logrotate 添加了一条新规则,如下所示:

/var/log/mysql/general.log {
daily
rotate 12
dateext
compress
missingok
notifempty
create 640 mysql adm
postrotate
        /usr/bin/killall -HUP rsyslogd
    endscript
}

根据 /etc/crontab 它在早上 6:25 运行,但昨天它没有轮换我的日志

25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )

运行 logrotate --dry-run 的输出:

logrotate -d general
reading config file general
reading config info for /var/log/mysql/general.log 

Handling 1 logs

rotating pattern: /var/log/mysql/general.log  after 1 days (12 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/mysql/general.log
  log does not need rotating
not running postrotate script, since no logs were rotated

我还需要做什么才能轮换我的日志?

答案1

日志轮转可能应该每天启动多次,可能每小时启动一次。是否实际轮换日志的决定应留给日志轮换设施(logrotate在您的情况下),而不是cron.

如果每 24 小时调用logrotate一次,可能会发生以下情况:

  • cron启动日志轮换作业X(一次)。
  • logrotate启动,遍历其要轮换的日志列表,并结束于X+nn几秒钟后)。

24小时后:

  • cron启动日志轮换作业X+24 小时)。
  • logrotate,如果它关心秒数,则会注意到在上一次日志轮换中轮换的日志尚未完全 24 小时(有一个 1 到n秒差异),并跳过它们。

相关内容