温馨提示×

如何轮转debian apache日志

小樊
38
2026-10-01 08:53:13
栏目: 智能运维

在 Debian 上轮转 Apache 日志,通常不需要自己写脚本,系统自带两种机制:

  1. logrotate(推荐,系统级)
  2. Apache 自带的 rotatelogs / 自定义管道(实时轮转)

下面分别说明。


一、使用 logrotate(最常用)

Debian 默认已安装 logrotate,并为 Apache 提供了配置文件。

1. 查看 Apache 的 logrotate 配置

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
}

2. 常见参数说明

  • daily / weekly / monthly:轮转周期
  • rotate 14:保留 14 个旧日志
  • compress:压缩旧日志
  • notifempty:空日志不轮转
  • postrotate:轮转后让 Apache 重新打开日志

3. 手动测试轮转

logrotate -d /etc/logrotate.d/apache2   # 模拟
logrotate -f /etc/logrotate.d/apache2   # 强制执行

4. 修改轮转策略(示例)

例如改为每周、保留 8 周:

/var/log/apache2/*.log {
    weekly
    rotate 8
    compress
    delaycompress
    missingok
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
        systemctl reload apache2
    endscript
}

二、使用 Apache rotatelogs(按大小/时间实时轮转)

适合不重启 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"

按大小轮转(如 100MB)

CustomLog "|/usr/bin/rotatelogs /var/log/apache2/access.log 100M" combined

修改后:

systemctl restart apache2

⚠️ 注意:这种方式产生的日志 logrotate 不要再重复管理,否则会冲突。


三、常见问题

1. 日志不轮转?

  • 检查 logrotate 是否运行:
cat /var/lib/logrotate/status
  • 是否 cron 正常:
systemctl status logrotate.timer

2. Apache 不写新日志?

  • 确保 postrotate 中有 reload apache2
  • 或直接使用 rotatelogs

推荐方案总结

场景 推荐方式
标准 Debian 服务器 logrotate
高并发 / 不想 reload rotatelogs
容器环境 rotatelogs 或外部采集

如果你愿意,可以告诉我:

  • Apache 版本
  • 日志路径
  • 是否用虚拟主机

我可以帮你写一份可直接用的配置。

0 踩