logrotate通过配置文件定义日志轮转规则,按时间或大小切割日志,保留指定数量旧文件并自动删除过期日志,结合cron定期执行,实现自动化管理。

Linux系统中日志文件会随着时间不断增长,占用大量磁盘空间。为了避免日志撑满磁盘,通常使用logrotate工具实现日志的自动切割与清理。logrotate不仅能按天、大小或周期切割日志,还能在保留指定数量的旧日志后自动删除过期文件。
logrotate基本工作原理
logrotate是一个Linux自带的日志管理工具,通过配置文件定义规则,定期对日志进行轮转(切割)、压缩、删除等操作。它一般由cron每天自动执行,无需手动干预。
核心功能包括:
- 按时间(每日、每周、每月)或文件大小触发切割
- 重命名旧日志文件并添加序号或时间戳
- 支持压缩归档以节省空间
- 设置保留份数,超出后自动清理
- 支持切割后执行自定义脚本(如重启服务)
配置logrotate实现自动切割与清理
以应用日志/var/log/myapp.log为例,设置每日切割,保留7份,超过自动删除。
在/etc/logrotate.d/下创建配置文件,例如:
sudo vim /etc/logrotate.d/myapp
写入以下内容:
/var/log/myapp.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 644 root root
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2>/dev/null` 2>/dev/null || true
endscript
}
2. 配置项说明- daily:每天轮转一次
- missingok:日志文件不存在时不报错
- rotate 7:只保留最近7个轮转文件,第8个自动删除
- compress:启用压缩(.gz格式)
- delaycompress:延迟压缩,最新一份不立即压缩(配合daily使用)
- notifempty:日志为空时不轮转
- create 644 root root:创建新日志文件,并设置权限和属主
- postrotate ... endscript:轮转后执行的命令,常用于通知服务重新打开日志文件
测试与验证配置
配置完成后,建议先手动测试是否生效。
使用-d参数查看调试信息:
logrotate -d /etc/logrotate.d/myapp
该命令不会实际执行,仅显示将要进行的操作。
2. 强制执行一次轮转确认无误后可强制运行:
logrotate -f /etc/logrotate.d/myapp
执行后检查/var/log/目录下是否生成了myapp.log.1.gz等文件。
logrotate记录每次运行状态在:
/var/lib/logrotate/status
可用以下命令查看:
cat /var/lib/logrotate/status | grep myapp基本上就这些。只要配置好
rotate N和合适的周期,logrotate就能自动完成切割与清理,避免日志堆积。关键是确保rotate数值合理,并定期检查磁盘使用情况。










