我打开了 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+n(n几秒钟后)。
24小时后:
cron
启动日志轮换作业是(X+24 小时)。logrotate
,如果它关心秒数,则会注意到在上一次日志轮换中轮换的日志尚未完全 24 小时(有一个 1 到n秒差异),并跳过它们。