Linux服务器长期运行后,各类服务产生的日志会不断累积,不仅占用大量磁盘空间,还会让日志检索变得困难。合理对日志进行压缩和归档,是保障服务器稳定运行的必要操作。

使用logrotate实现自动日志压缩归档
logrotate是Linux系统自带的日志管理工具,支持按时间、大小等维度自动轮转、压缩、归档日志,配置文件通常存放在/etc/logrotate.conf和/etc/logrotate.d/目录下。
基础配置示例
以Nginx访问日志为例,在/etc/logrotate.d/目录下新建nginx配置文件:
/var/log/nginx/access.log {
daily # 每天轮转一次
rotate 7 # 保留7个归档文件
compress # 压缩归档文件
delaycompress # 延迟压缩,下次轮转时再压缩上一个归档
missingok # 日志不存在时不报错
notifempty # 日志为空时不轮转
create 0644 nginx nginx # 新建日志文件的权限和属主属组
postrotate # 轮转后执行的命令,重新打开日志文件
/usr/sbin/nginx -s reopen > /dev/null 2>&1
endscript
}
配置参数说明
- daily/weekly/monthly:指定轮转周期
- rotate N:保留N个归档日志,超过的会自动删除
- compress:使用gzip压缩归档日志,生成的文件后缀为.gz
- size 100M:日志达到100M时才触发轮转,和周期参数可同时使用
- dateext:归档文件名添加日期后缀,比如access.log-20240501.gz
手动压缩归档日志的方法
如果需要临时处理某类日志,也可以手动使用tar和gzip命令完成压缩归档。
单文件压缩
使用gzip直接压缩单个日志文件:
# 压缩单个日志文件,压缩后会生成access.log.gz,原文件默认删除 gzip /var/log/app/app.log # 压缩时保留原文件 gzip -k /var/log/app/app.log # 解压gz文件 gunzip /var/log/app/app.log.gz
多文件归档压缩
使用tar打包多个日志文件并压缩:
# 打包/var/log/app目录下所有.log文件,用gzip压缩,生成app_logs.tar.gz tar -czvf app_logs.tar.gz /var/log/app/*.log # 解压tar.gz归档文件到当前目录 tar -xzvf app_logs.tar.gz # 查看归档文件内容,不解压 tar -tzvf app_logs.tar.gz
归档日志的存储与清理策略
压缩归档后的日志也需要合理管理,避免长期堆积占用空间:
- 将归档日志存储到独立的磁盘分区,避免和系统盘抢占空间
- 按业务类型分类存储归档日志,方便后续检索
- 设置定期清理规则,比如超过3个月的归档日志自动删除,可结合crontab实现
- 重要日志可以同步到远程存储节点,防止本地数据丢失
常见问题排查
如果日志没有按预期压缩归档,可以从以下几个方向排查:
- 检查logrotate配置文件语法是否正确,可使用
logrotate -d /etc/logrotate.conf调试模式查看执行逻辑 - 确认日志文件权限,logrotate进程需要有日志文件的读写权限
- 检查crontab中logrotate的执行任务是否正常,默认系统会每天自动执行logrotate
- 如果手动执行tar命令压缩失败,检查是否有文件被进程占用,可先停止相关服务再操作
logrotateLinux_log_managementgziptar修改时间:2026-07-11 20:06:13