在 Debian 上,Apache 日志的轮转一般是通过 logrotate 来完成的,而不是直接由 Apache 自己管理。下面给你说清楚原理 + 配置方法 + 常用操作。
Debian 默认安装了 logrotate,并且为 Apache 提供了配置文件:
/etc/logrotate.d/apache2
Apache 的日志通常在:
/var/log/apache2/access.log
/var/log/apache2/error.log
logrotate 会按配置周期(如每天/每周)轮转日志,并通过发送信号让 Apache 重新打开日志文件。
一个典型的 Debian apache2 logrotate 配置:
/var/log/apache2/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
if [ -f /var/run/apache2.pid ]; then
/etc/init.d/apache2 reload > /dev/null
fi
endscript
}
daily:每天轮转rotate 14:保留 14 个旧日志compress:压缩旧日志(.gz)delaycompress:延迟一天再压缩notifempty:空日志不轮转postrotate:轮转后让 Apache 重新加载(非常重要)weekly
rotate 4
size 100M
如果是 systemd 系统(Debian 8+):
postrotate
systemctl reload apache2 > /dev/null 2>&1 || true
endscript
logrotate -d /etc/logrotate.d/apache2
logrotate -f /etc/logrotate.d/apache2
⚠️ 注意:强制轮转后 Apache 会自动 reload,不会丢日志。
检查:
ls -l /etc/logrotate.d/apache2
systemctl status logrotate
说明 postrotate 没执行成功
确认:
systemctl reload apache2
例如:
/var/log/httpd/xxx.log
那你需要在 /etc/logrotate.d/ 新建一个文件,例如:
/var/log/httpd/*.log {
daily
rotate 7
compress
missingok
notifempty
sharedscripts
postrotate
systemctl reload apache2
endscript
}
如果你愿意,可以贴一下:
/etc/logrotate.d/apache2 内容我可以帮你直接优化配置。