在Linux系统中,日志文件是排查故障、分析性能的核心依据。然而,随着时间推移,日志文件可能迅速膨胀,导致磁盘空间告急甚至系统崩溃。为此,logrotate应运而生——它是Linux生态中自动化管理日志的标杆工具,专为日志轮转、压缩、归档及清理设计。通过预设策略,logrotate可按时间(每日/每周/每月)或文件大小触发轮转,将旧日志重命名并压缩存储,同时限制历史文件数量,避免无限增长。其支持与Crontab集成实现定时任务,还能通过自定义脚本通知服务重新加载日志(如Nginx的kill -USR1),确保日志无缝切换。无论是系统日志(如/var/log/messages)还是应用日志(如Nginx、MySQL),均可通过灵活的配置文件实现精准管理,是运维工作中不可或缺的“磁盘空间守护者”。
一、logrotate核心功能
-
1.日志轮转
- 触发条件:支持按时间(
daily/weekly/monthly)或文件大小(size 100M)轮转。 - 文件处理:将当前日志重命名为带时间戳或序号的文件(如
app.log.1),并创建新文件继续写入。 - 压缩优化:默认使用
gzip压缩旧日志,可通过delaycompress延迟压缩以保留未压缩的最新备份。
- 触发条件:支持按时间(
-
2.存储管理
- 保留策略:通过
rotate N保留指定数量的历史文件,超期文件自动删除。 - 空间清理:支持
maxage按天数清理旧日志,或通过mail将旧日志发送至指定邮箱。
- 保留策略:通过
-
3.高级操作
- 无缝切换:使用
copytruncate模式避免重启服务(适用于无法重开日志的程序)。 - 自定义脚本:通过
postrotate和prerotate执行轮转前后的操作(如通知服务重载日志)。
- 无缝切换:使用
二、配置文件详解
-
1.全局配置(
/etc/logrotate.conf)-
定义默认策略,如压缩、轮转周期、保留数量等。
-
示例配置:
Bashweekly # 每周轮转 rotate 4 # 保留4个历史文件 compress # 启用压缩 include /etc/logrotate.d # 包含子配置
-
-
2.子配置(
/etc/logrotate.d/)-
针对不同应用定制规则,如Nginx日志配置:
Bash/var/log/nginx/*.log { daily rotate 7 compress delaycompress missingok postrotate /usr/bin/systemctl reload nginx # 通知Nginx重载日志 endscript } -
关键参数:
create 0640 user group:新建日志文件的权限与属主。notifempty:空文件不轮转。dateext:使用日期后缀命名(如app.log-20250519)。
-
三、工作原理与实战
-
1.执行流程
- 定时触发:通过
/etc/cron.daily/logrotate每日自动执行。 - 轮转步骤:重命名旧日志→创建新文件→压缩→删除超期文件→执行自定义脚本。
- 定时触发:通过
-
2.手动测试与调试
- 强制轮转:
logrotate -f /etc/logrotate.d/nginx。 - 调试模式:
logrotate -d模拟执行并显示详细过程。 - 常见问题:权限不足、路径错误、脚本执行失败(可通过
/var/log/messages排查)。
- 强制轮转:
-
3.实战案例
-
案例1:按大小轮转应用日志
Bash/var/log/myapp/app.log { size 100M rotate 5 compress postrotate /bin/kill -USR1 $(cat /var/run/myapp.pid) # 通知应用重载日志 endscript } -
案例2:自定义路径与批量处理
Bash/var/log/custom/*.log { rotate 32 size 64M sharedscripts postrotate systemctl restart rsyslog # 批量重启服务 endscript }
-
四、注意事项与优化
-
1.权限与路径
- 确保
create指定的用户有权写入日志目录。 - 使用
copytruncate时验证服务兼容性(如Nginx需-s reopen)。
- 确保
-
2.配置验证
- 修改后使用
logrotate -d调试,避免配置错误导致日志丢失。
- 修改后使用
-
3.性能优化
- 避免频繁轮转小文件,建议结合
size与时间周期。 - 高并发服务优先使用
copytruncate,避免文件句柄失效。
- 避免频繁轮转小文件,建议结合
结语 logrotate以其高度自动化和灵活性,成为Linux日志管理的核心工具。通过合理配置,不仅能有效预防磁盘空间危机,还能提升日志检索效率,为系统稳定性保驾护航。
