Logrotate 管理 Apache 日志的核心是配置 /etc/logrotate.d/ 下的规则文件,按时间或大小自动切分、压缩、清理旧日志;需确认日志路径(如 Ubuntu 为 /var/log/apache2/*.log),设置 daily、rotate 7、create 644 www-data adm 及 postrotate reload,并通过 logrotate -vf 测试生效。
用 Logrotate 管理 Apache 日志,核心是配置一个规则文件,让系统自动按时间或大小切分、压缩、清理旧日志,避免磁盘被撑爆。它不依赖 Apache 自身,而是作为 Linux 系统级工具独立运行。
Apache 日志默认位置因发行版而异:
/var/log/apache2/access.log 和 error.log
/var/log/httpd/access_log 和 error_log
Logrotate 配置通常放在 /etc/logrotate.d/ 目录下。系统一般已自带 apache2(Ubuntu)或 httpd(CentOS)配置文件,可直接修改,也可新建(如 /etc/logrotate.d/myapache)。
以 Ubuntu 为例,在 /etc/logrotate.d/apache2 中写入:
/var/log/apache2/*.log { daily missingok rotate 7 compress delaycompress notifempty create 644 www-data adm sharedscripts postrotate systemctl reload apache2 > /dev/null 2>&1 || true endscript}
关键点说明:
daily:每天执行一次轮转;也可换为 weekly 或 size 100M(按大小触发,优先级更高)rotate 7:保留最近 7 个归档(如 access.log.1.gz 到 access.log.7.gz)create 644 www-data adm:新日志文件权限设为 644,属主 www-data,属组 adm(确保 Apache 进程能继续写入)postrotate ... reload:轮转后重载 Apache,让它重新打开日志文件句柄,防止日志写入丢失配置完别急着等 cron,先手动验证:
sudo logrotate -d /etc/logrotate.d/apache2(-d 是 debug 模式,只模拟不执行)sudo logrotate -vf /etc/logrotate.d/apache2(-v 显示详情,-f 强制)/var/log/apache2/ 目录,确认生成了 access.log.1 或 access.log.1.gz,原 access.log 变为空文件Logrotate 默认由 /etc/cron.daily/logrotate 触发,每天凌晨运行,无需额外设置定时任务。
如果发现新日志没写入、旧日志没压缩或轮转没发生,重点查这几项:
create 行指定的用户组(如 www-data:adm)与 Apache 进程实际运行身份一致postrotate 中的 reload 命令失败时不会中断轮转,建议加 || true 并检查 Apache 服务状态*.log)能匹配到真实文件;若用了自定义路径(如 /opt/myapp/logs/),需在配置中明确写出df -h 和 df -i 快速排查