在 Ubuntu 上,Apache 的日志轮转通常是通过 logrotate 来管理的。下面分几种情况说明。
Ubuntu 安装 Apache(apache2)后,会自动安装并配置 logrotate:
配置文件位置:
/etc/logrotate.d/apache2
Apache 日志默认目录:
/var/log/apache2/
默认情况下,Ubuntu 会:
reload)cat /etc/logrotate.d/apache2
常见内容示例(简化):
/var/log/apache2/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
if invoke-rc.d apache2 status > /dev/null 2>&1; then
invoke-rc.d apache2 reload > /dev/null 2>&1
fi
endscript
}
含义:
daily:每天轮转rotate 14:保留 14 个旧日志compress:压缩旧日志delaycompress:延迟压缩(方便 Apache 继续写)postrotate:轮转后 reload Apachelogrotate -d /etc/logrotate.d/apache2
(-d 是 debug,不会真正轮转)
logrotate -f /etc/logrotate.d/apache2
例如超过 100M 才轮转:
/var/log/apache2/*.log {
size 100M
rotate 10
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
systemctl reload apache2 > /dev/null 2>&1 || true
endscript
}
原因:Apache 没 reload
解决:确保 postrotate 里有:
systemctl reload apache2
或使用:
apachectl graceful
Apache 本身有 rotatelogs,但:
示例(不推荐但可用):
CustomLog "|/usr/bin/rotatelogs /var/log/apache2/access_log 86400" combined
ls -lh /var/log/apache2/
看到类似:
access.log
access.log.1
access.log.2.gz
说明轮转正常。
如果你愿意,我可以:
直接告诉我你的使用场景即可。