在CentOS系统中,Apache日志(如access.log、error.log)会随时间增长占用大量磁盘空间。以下是手动清理、自动轮转及辅助工具三类常用清理方法,覆盖临时清理与长期管理需求。
适用于紧急清理过期日志,操作直接但需谨慎避免误删系统文件。
/var/log/httpd/(部分系统可能为/var/log/apache2/),使用以下命令进入:cd /var/log/httpd/
ls -l命令确认日志文件名称及大小,例如:ls -lh access.log error.log access.log.1.gz
find命令查找并删除*.log文件中超过N天的记录(如30天):sudo find /var/log/httpd/ -type f -name "*.log" -mtime +30 -exec rm {} \;
access.log),可使用:sudo rm -f /var/log/httpd/access.log /var/log/httpd/error.log
⚠️ 注意:删除前确保文件无重要数据,建议先备份(如
tar -czvf apache_logs_backup.tar.gz *.log)。
logrotate是CentOS系统自带的日志管理工具,可实现自动压缩、删除、轮转,避免手动操作繁琐。
sudo yum install logrotate -y
/etc/logrotate.d/目录下新建apache2文件(名称自定义),添加以下内容:/var/log/httpd/*.log {
daily # 每天轮转(可选:weekly/monthly)
missingok # 日志文件丢失时不报错
rotate 30 # 保留30个轮转文件(即30天)
compress # 使用gzip压缩旧日志(节省空间)
delaycompress # 延迟1天压缩(避免压缩当天日志)
notifempty # 日志为空时不轮转
create 640 root adm # 新日志文件权限(属主root,属组adm)
sharedscripts # 所有日志轮转完成后执行postrotate
postrotate
if /etc/init.d/httpd status > /dev/null; then \
/etc/init.d/httpd reload > /dev/null; \
fi;
endscript
}
配置项说明:
daily:轮转频率(可根据需求改为weekly/monthly);rotate 30:保留30个轮转文件(即30天日志);postrotate:轮转后重新加载Apache,确保日志写入新文件。
sudo logrotate -f /etc/logrotate.d/apache2
/etc/cron.daily/logrotate每日自动运行,可通过以下命令查看日志确认:tail -f /var/log/logrotate.log
通过Apache内置的rotatelogs工具,让Apache自身按时间或大小分割日志,减少单文件体积。
/etc/httpd/conf/httpd.conf(或虚拟主机配置文件),修改日志路径:ErrorLog "|/usr/sbin/rotatelogs /var/log/httpd/error_log.%Y%m%d 86400" combined
CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/access_log.%Y%m%d 86400" combined
参数说明:
%Y%m%d:按日期分割(如error_log.20251110);86400:分割间隔(秒,86400秒=1天)。
sudo systemctl restart httpd
此时Apache会每天自动生成新的日志文件,旧文件保留但需配合logrotate或手动清理(避免无限增长)。sudo或root用户执行,避免权限不足导致失败;tar -czvf apache_logs_$(date +%F).tar.gz /var/log/httpd/*.log);df -h查看磁盘空间,避免日志占满导致系统故障;rotate保留天数(如日志量大则设为15-30天,量小则设为60天)。