日志是排查故障的利剑,但是日志文件不断增长,如果不及时管理,不仅占用大量磁盘空间,还可能导致系统异常甚至宕机。
本篇系统讲解 Linux 下最常用的日志轮转工具——logrotate
1 什么是日志轮转?
日志轮转,简单来说,就是:
定期对日志文件进行归档、压缩、备份,防止日志无限增长,占满服务器磁盘。
日志轮转通常包含以下操作:
将旧日志文件重命名归档(比如加上时间戳) 压缩历史日志以节省空间 限制保留日志数量,超期日志自动删除 可在轮转后执行命令,如通知程序重新生成日志
为什么需要日志轮转?
避免磁盘空间爆满 加快日志检索速度 便于归档和审计
一句话总结:日志轮转,是服务器自我保护的一种能力。
2 什么是 logrotate?
logrotate 是 Linux/Unix 系统中专门用于管理日志轮转的工具。
它具有以下特点:
支持定时自动轮转 可针对不同日志文件制定不同策略 支持压缩、删除、邮件发送等操作 可结合自定义脚本执行复杂操作
大部分 Linux 发行版(如 CentOS、Ubuntu、Rocky Linux)都预装了 logrotate。系统日志、Nginx、MySQL、Tomcat 等日志轮转大多基于它实现。
3 logrotate 安装与基本使用
检查是否安装
在终端执行:
logrotate --version

如果未安装,根据你的系统安装:
RHEL CentOS Rocky Linux:
dnf install -y logrotate
Ubuntu Debian:
sudo apt install -y logrotate
4 logrotate 配置文件详解
logrotate 配置非常灵活,分为两类:
4.1 全局配置文件
/etc/logrotate.conf文件设置服务器的统一默认规则,适用于大多数普通日志
推荐的全局配置:
# 全局轮转周期
weekly # 每周轮转一次
rotate 4 # 保留最近4次的归档
create # 每次轮转后新建日志
compress # 归档文件 gzip 压缩
delaycompress # 延迟一轮再压缩
missingok # 日志丢失不报错
notifempty # 日志为空不轮转
dateext # 使用日期作为后缀,如 .log-20250426.gz
# 包含单独服务配置
include etc/logrotate.d
4.2 子配置文件
子配置文件/etc/logrotate.d/*
针对每个应用(如 nginx、mysql、docker)单独定制。
Nginx配置示例:/etc/logrotate.d/nginx
:
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 nginx adm
sharedscripts
postrotate
[ -s run/nginx.pid ] && kill -USR1 $(cat run/nginx.pid)
endscript
}
MySQL配置示例:
/var/log/mysql/*.log {
weekly
rotate 8
missingok
compress
notifempty
create 640 mysql mysql
sharedscripts
postrotate
usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf flush-logs
endscript
}
配置参数详解
dailyweekly/ monthly | |
rotate N | |
compress | |
delaycompress | |
missingok | |
notifempty | |
create MODE OWNER GROUP | |
postrotate endscript |
【注意】子配置文件默认会继承全局配置,但可以覆盖!
5 logrotate 工作原理
logrotate 通过定时任务(cron)每天自动执行,流程如下:
定时触发:由 /etc/cron.daily/logrotate
脚本调度加载配置:读取 /etc/logrotate.conf
和/etc/logrotate.d/
*检查日志文件: 是否满足轮转条件(时间、大小) 文件是否存在、是否为空 执行轮转动作: 重命名旧日志(加时间后缀) 压缩归档 创建新的日志文件 删除超期的旧日志 执行钩子脚本(postrotate)
如果一切正常,轮转过程对应用程序是透明的。
6 手动测试与故障排查
有时候需要手动测试 logrotate 是否配置正确,方法如下:
6.1 手动测试单个配置文件
sudo logrotate -f etc/logrotate.d/nginx
6.2 带详细日志模式
sudo logrotate -vf etc/logrotate.d/nginx
-f
强制轮转-v
显示详细执行过程
常见错误排查:
配置路径错误 权限不足,无法新建日志文件 postrotate脚本出错,导致服务无法重新打开日志
查看系统日志 /var/log/messages
可以帮助进一步排查。
往期精彩文章:
文章转载自运维李哥不背锅,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




