文章总结: 本文介绍了Linux日志管理工具logrotate,旨在解决日志无限增长导致的磁盘占满问题。文章详细讲解了logrotate的安装、配置规则及工作原理,提供了Nginx和MySQL的实战配置示例,并说明了手动测试与故障排查技巧。通过合理配置logrotate,可实现日志自动归档与清理,提升服务器运行效率。 综合评分: 92 文章分类: 安全工具,安全建设
Linux运维必备!logrotate日志轮转神器,再也不怕磁盘被日志占满了
原创
小柳实验室
小柳实验室
2026年1月15日 06:50 湖南
日志是服务器运维的 “故障诊断书”,系统运行状态、应用报错详情全靠它追溯。但日志文件会像滚雪球一样持续增大,不仅吞噬宝贵磁盘空间,还会让日志检索变慢,甚至因磁盘爆满导致系统宕机!
今天就给大家分享Linux系统自带的日志管理神器——logrotate,从原理到实操,教你一键实现日志自动归档、压缩、清理,让日志管理更高效,服务器更稳定~
一、日志轮转:为什么是服务器“必备技能”?
日志轮转本质是一套“日志生命周期管理机制”,核心就是防止日志无限增长,主要解决3大痛点:
- • 避免磁盘爆满:自动清理超期日志,不让无用日志占用关键磁盘空间;
- • 提升检索效率:拆分后的日志体积更小,查询特定时间段日志时速度翻倍;
- • 便于审计归档:按时间戳归档的日志,直接满足合规审计和问题回溯需求。
简单说,日志轮转就像给日志 “定期瘦身+存档”,是服务器自我保护的核心能力~
二、logrotate:Linux默认的日志管理王者
logrotate是Linux/Unix系统默认预装的日志轮转工具(CentOS、Ubuntu、Rocky Linux等主流发行版都自带),之所以成为运维标配,全靠这些核心优势:
- • 支持按天/周/月,或按日志大小(如100M)触发轮转;
- • 可给
Nginx、MySQL、Tomcat等单个应用定制独立规则; - • 内置压缩、删除、邮件发送等实用功能;
- • 支持执行自定义脚本,实现服务重载等复杂操作。
无论是系统日志(/var/log/),还是各类应用日志,其轮转管理大多依赖logrotate实现~
三、快速上手:安装与基础检查
1. 先查是否已安装
终端输入以下命令,输出版本信息说明已预装:
logrotate --version
2. 手动安装(未预装时)
- • RHEL/CentOS/Rocky Linux:
dnf install -y logrotate
- • Ubuntu/Debian:
sudo apt install -y logrotate
四、配置详解:灵活定制轮转规则
logrotate的配置分“全局配置”和“子配置”,全局定默认规则,子配置针对单个应用定制(优先级更高,可覆盖全局),新手也能轻松上手~
1. 全局配置文件:/etc/logrotate.conf
定义服务器级默认策略,适用于大多数普通日志,推荐配置(带详细注释):
# 轮转周期:weekly(每周)/daily(每天)/monthly(每月)
weekly
# 保留最近4个归档文件,超期自动删除
rotate 4
# 轮转后自动创建新日志文件
create
# 归档日志用gzip压缩(省空间)
compress
# 延迟压缩:当前轮转日志不压缩,下次再压缩(避免影响应用读写)
delaycompress
# 日志不存在不报错(防止误报)
missingok
# 日志为空时不轮转
notifempty
# 归档文件加日期戳(如access.log-20250426.gz),方便识别
dateext
# 加载应用级子配置
include /etc/logrotate.d
2. 子配置文件:/etc/logrotate.d/
每个应用的独立规则放在/etc/logrotate.d/目录,文件名与应用名一致(如nginx、mysql),直接套用示例即可~
示例1:Nginx日志轮转(/etc/logrotate.d/nginx)
# 匹配Nginx所有日志文件
/var/log/nginx/*.log {
daily # 每天轮转(覆盖全局weekly)
missingok # 日志不存在不报错
rotate 14 # 保留14天归档(覆盖全局4次)
compress # 压缩归档
delaycompress # 延迟压缩
notifempty # 空日志不轮转
create 0640 nginx adm # 新建日志,权限0640,所有者nginx:adm
sharedscripts # 所有日志轮转后只执行1次脚本
postrotate # 轮转后重载Nginx,让其写入新日志
[ -s /run/nginx.pid ] && kill -USR1 $(cat /run/nginx.pid)
endscript
}
示例2:MySQL日志轮转(/etc/logrotate.d/mysql)
# 匹配MySQL所有日志文件
/var/log/mysql/*.log {
weekly # 每周轮转
rotate 8 # 保留8周(2个月)归档
missingok # 日志不存在不报错
compress # 压缩归档
notifempty # 空日志不轮转
create 640 mysql mysql # 新建日志,权限640,所有者mysql:mysql
sharedscripts # 统一执行脚本
postrotate # 轮转后刷新MySQL日志,避免写入异常
/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf flush-logs
endscript
}
3. 核心参数速查表(新手必备)
| 指令 | 说明 | | — | — | | daily/weekly/monthly | 轮转周期:每天/每周/每月 | | size 100M | 按大小触发(如日志达100M立即轮转) | | rotate N | 保留N个归档文件,超期删除最早的 | | compress | gzip压缩归档(后缀.gz) | | delaycompress | 延迟压缩,当前轮转日志下次再压缩 | | missingok | 日志不存在不报错 | | notifempty | 空日志不轮转 | | create 权限 所有者 组 | 新建日志并指定权限、所有者(如0640 nginx adm) | | postrotate/endscript | 轮转后执行脚本(如重载服务),配合sharedscripts使用 | | dateext | 归档文件加日期戳(如.log-20250426) |
五、工作原理:logrotate如何自动运行?
logrotate的自动执行全靠Linux的cron定时任务,流程超简单:
- 1. 定时触发:
/etc/cron.daily/目录下的logrotate脚本,每天被cron自动执行; - 2. 加载配置:先读全局配置
/etc/logrotate.conf,再加载/etc/logrotate.d/所有子配置; - 3. 条件判断:检查日志是否满足轮转条件(时间/大小达标、文件存在且非空);
- 4. 执行轮转:重命名旧日志(加日期戳)→ 压缩归档 → 创建新日志 → 删除超期归档;
- 5. 执行脚本:若配置了postrotate,自动执行脚本(如重载应用)。
整个过程对应用透明,完全不影响服务正常运行~
六、手动测试+故障排查(避坑必备)
配置完成后一定要手动测试,避免踩坑!
1. 手动测试轮转
(1)强制轮转单个配置
# 强制执行Nginx日志轮转(-f:强制触发)
sudo logrotate -f /etc/logrotate.d/nginx
(2)详细日志模式(推荐)
# -v:显示执行过程,-f:强制轮转,方便排查问题
sudo logrotate -vf /etc/logrotate.d/nginx
2. 常见故障排查
- • 路径错误:检查日志路径、应用PID路径是否正确(如Nginx的pid是否在/run/nginx.pid);
- • 权限不足:新日志权限需与应用运行用户匹配(如Nginx用nginx用户,新日志所有者设为nginx);
- • 脚本报错:手动执行postrotate中的命令,排查是否因PID不存在、命令错误导致失败;
- • 查看系统日志:通过
grep logrotate /var/log/messages(CentOS)或/var/log/syslog(Ubuntu)获取执行日志。
七、总结
logrotate作为Linux运维的“日志管家”,通过简单配置就能实现日志的自动化轮转、压缩、清理,从根本上解决日志无限增长的问题。
无论是单机服务器还是集群环境,合理使用logrotate都能让日志管理更高效,服务器更稳定~ 赶紧收藏起来,下次配置日志轮转直接套用!
📬 关注我
推荐阅读
Redis主从复制深度解析:数据高可用与负载均衡的核心方案
运维必备|Zabbix 从 0 到 1 搭建企业级监控,告警自动喊你处理!
15分钟搞定业务宕机!运维必备排查指南(附实操命令)
SCP 与 rsync 到底怎么选?运维老鸟的文件传输避坑指南
效率拉满!Docker+Nginx 一站式部署 Java(JAR/WAR 通用),运维再也不加班
别再搞混Nginx和OpenResty!90%运维都踩过的坑,一文讲透核心差异
开发运维必备神器!HexHub 一站式搞定数据库、SSH、Docker 所有需求
网络排查神器!掌握 tcpdump,让网络故障无处遁形
MySQL 与 PostgreSQL:两个老对手的技术对决与选型指南
高性能存储刚需党必看!Docker 部署 RustFS,效率直接拉满
别再用第三方短链了!这个开源神器3分钟搭建专属短网址平台
Linux服务器重启后服务不自启?systemd实战指南 + 混沌演练验证
502 Bad Gateway 不是终点:一次生产事故背后的全链路复盘
备份做了,但能恢复吗?MySQL 数据恢复终极指南来了!
Firewalld 实战全攻略:从入门到精通,搭配 ipset 打造高效防护体系!
命令行也能玩转 WebSocket?别再用浏览器调了
MySQL 自动化备份脚本:安全、高效、免维护
Docker磁盘空间告急?3分钟教你彻底清理,释放大量空间!
Nginx 如何正确代理 SSE 与 WebSocket?一篇讲透长连接配置
【实战】打造超强Linux防火墙!10分钟提升服务器安全等级
一个不存在的用户,竟让MySQL 8.4当场崩溃?背后藏着甲骨文不敢明说的安全暗战!
无公网IP!NPS内网穿透终极指南,Docker一键部署
告别 Docker Hub 依赖!从零部署高可用 Harbor 私有镜像仓库
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:小柳实验室 小柳实验室《Linux运维必备!logrotate日志轮转神器,再也不怕磁盘被日志占满了》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论