温馨提示×

ubuntu apache日志怎样轮转

小樊
39
2026-09-15 17:43:25
栏目: 智能运维

在 Ubuntu 上,Apache 的日志轮转一般是通过 logrotate 来管理的,不需要手动写脚本。下面给你说清楚原理和常见做法。


一、Ubuntu 中 Apache 日志轮转机制

Ubuntu 下 Apache(通常是 apache2)的日志轮转由 logrotate 管理:

  • 配置文件:/etc/logrotate.d/apache2
  • 日志目录:/var/log/apache2/
  • 常用日志:
    • access.log
    • error.log

logrotate 一般每天由 cron / systemd timer 自动执行。


二、默认配置示例(简化)

/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:压缩旧日志(.gz
  • delaycompress:延迟一次压缩
  • notifempty:日志为空不轮转
  • postrotate:轮转后 reload Apache(重要)

三、如何确认是否在正常工作

1. 手动测试(不真正轮转)

logrotate -d /etc/logrotate.d/apache2

2. 强制执行一次

logrotate -f /etc/logrotate.d/apache2

3. 查看日志

ls -lh /var/log/apache2/

你应该会看到:

access.log
access.log.1
error.log
error.log.1.gz

四、常见问题与解决

1. 日志没有轮转

检查:

systemctl status logrotate.timer

cat /etc/cron.daily/logrotate

2. Apache 没重新打开日志

确保 postrotate 中有 reload:

invoke-rc.d apache2 reload

systemctl reload apache2

3. 使用 piped logs(非文件)

如果你在 Apache 中用了:

CustomLog "|/usr/bin/rotatelogs ..."

那就 不需要 logrotate,由 Apache 自己管理。


五、自定义轮转策略(示例)

每周 + 保留 8 周

/var/log/apache2/*.log {
    weekly
    rotate 8
    compress
    delaycompress
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
        systemctl reload apache2 > /dev/null 2>&1
    endscript
}

六、总结

✅ Ubuntu Apache 日志轮转 标准做法

  • logrotate
  • 配置文件在 /etc/logrotate.d/apache2
  • 轮转后 reload apache2

如果你愿意,可以贴一下你的:

  • Apache 版本
  • 是否用了 rotatelogs
  • 当前日志大小

我可以帮你定制一份配置。

0