温馨提示×

Debian Apache日志如何分割

小樊
47
2026-07-27 16:44:05
栏目: 智能运维

在 Debian 上,Apache 日志分割最常用、最推荐的做法是使用 logrotate,而不是自己写脚本。下面按“推荐方案 → 其他方案 → 常见排查”来说明。


一、推荐方案:使用 logrotate(Debian 默认已配置)

Debian 安装 Apache 后,已经自带 logrotate 配置,通常位于:

/etc/logrotate.d/apache2

1️⃣ 查看当前配置

cat /etc/logrotate.d/apache2

典型内容示例(简化):

/var/log/apache2/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 640 www-data adm
    sharedscripts
    postrotate
        systemctl reload apache2 > /dev/null 2>&1 || true
    endscript
}

2️⃣ 配置说明(重点)

参数 含义
daily 每天分割
weekly 每周分割
rotate 14 保留 14 个旧日志
compress 压缩旧日志(.gz)
delaycompress 延迟一次压缩
notifempty 空日志不分割
postrotate 分割后让 Apache 重新打开日志

关键点
postrotate 里必须 reload Apache,否则 Apache 还会写旧文件。


3️⃣ 修改分割策略(示例)

按天 + 保留 30 天

daily
rotate 30

按大小(例如 100M)

size 100M
rotate 10

修改后无需重启,logrotate 自动生效。


4️⃣ 手动测试 logrotate

logrotate -d /etc/logrotate.d/apache2

-d 是调试模式,不真正执行)

强制执行一次:

logrotate -f /etc/logrotate.d/apache2

二、Apache 自带方式(rotatelogs,不推荐新手)

Apache 自带 rotatelogs,但配置复杂、容易踩坑

示例(不推荐但可用)

CustomLog "|/usr/bin/rotatelogs /var/log/apache2/access.log.%Y-%m-%d 86400" combined
ErrorLog "|/usr/bin/rotatelogs /var/log/apache2/error.log.%Y-%m-%d 86400"

⚠️ 缺点:

  • 不自动清理旧日志
  • 管道方式影响性能
  • Debian 官方推荐 logrotate

三、虚拟主机(vhost)日志分割

如果你的日志不在默认位置,例如:

CustomLog /var/log/apache2/site1/access.log combined

方法 1:扩展 logrotate(推荐)

/etc/logrotate.d/apache2 中增加路径:

/var/log/apache2/site1/*.log {
    daily
    rotate 30
    compress
    missingok
    notifempty
    create 640 www-data adm
    postrotate
        systemctl reload apache2
    endscript
}

四、常见问题排查

❓ 日志没有分割?

  1. 确认 logrotate 已运行:

    cat /var/lib/logrotate/status
    
  2. 确认 cron 正常:

    systemctl status cron
    
  3. 查看日志:

    cat /var/log/syslog | grep logrotate
    

❓ Apache 还在写旧日志?

一定是 没有 reload Apache
✅ 必须包含:

systemctl reload apache2

五、总结(最佳实践)

Debian + Apache 官方推荐方案

  • 使用 logrotate
  • 不要自己写脚本
  • 不要直接用 rotatelogs
  • 保持 postrotate reload apache2

如果你愿意,可以把你的:

  • Apache 版本
  • 日志路径
  • 希望按「天 / 大小 / 保留多久」

发给我,我可以直接帮你写一份 可用的 logrotate 配置

0