在 Debian 上轮转 Apache 日志,通常不需要自己写脚本,系统自带两种机制:
下面分别说明。
Debian 默认已安装 logrotate,并为 Apache 提供了配置文件。
cat /etc/logrotate.d/apache2
典型内容类似:
/var/log/apache2/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
systemctl reload apache2 > /dev/null 2>&1 || true
endscript
}
daily / weekly / monthly:轮转周期rotate 14:保留 14 个旧日志compress:压缩旧日志notifempty:空日志不轮转postrotate:轮转后让 Apache 重新打开日志logrotate -d /etc/logrotate.d/apache2 # 模拟
logrotate -f /etc/logrotate.d/apache2 # 强制执行
例如改为每周、保留 8 周:
/var/log/apache2/*.log {
weekly
rotate 8
compress
delaycompress
missingok
notifempty
create 640 root adm
sharedscripts
postrotate
systemctl reload apache2
endscript
}
适合不重启 Apache、按小时或大小切分日志。
编辑虚拟主机配置:
CustomLog "|/usr/bin/rotatelogs /var/log/apache2/access_%Y%m%d.log 86400" combined
ErrorLog "|/usr/bin/rotatelogs /var/log/apache2/error_%Y%m%d.log 86400"
CustomLog "|/usr/bin/rotatelogs /var/log/apache2/access.log 100M" combined
修改后:
systemctl restart apache2
⚠️ 注意:这种方式产生的日志 logrotate 不要再重复管理,否则会冲突。
logrotate 是否运行:cat /var/lib/logrotate/status
systemctl status logrotate.timer
postrotate 中有 reload apache2rotatelogs| 场景 | 推荐方式 |
|---|---|
| 标准 Debian 服务器 | logrotate |
| 高并发 / 不想 reload | rotatelogs |
| 容器环境 | rotatelogs 或外部采集 |
如果你愿意,可以告诉我:
我可以帮你写一份可直接用的配置。