logrotate是Linux默认日志轮转工具,支持按时间、大小自动归档压缩清理;配置含全局文件/etc/logrotate.conf与服务专属文件(如/etc/logrotate.d/nginx),可手动测试或通过systemd timer调度。

如果您的Linux系统中日志文件持续增长而未加管控,可能导致磁盘空间耗尽或日志检索效率下降。logrotate是系统默认提供的日志轮转工具,通过配置可实现按时间、大小自动归档、压缩与清理。以下是具体配置实践步骤:
一、基础配置文件结构说明
logrotate主配置由全局配置文件/etc/logrotate.conf驱动,该文件定义默认行为,并通过include指令加载/etc/logrotate.d/目录下各服务的独立配置。每个配置块针对特定日志路径设定轮转策略,语法严格依赖缩进与关键字顺序。
1、使用文本编辑器打开全局配置文件:sudo nano /etc/logrotate.conf
2、确认存在包含语句:include /etc/logrotate.d
3、检查/etc/logrotate.d/目录是否存在且可读:ls -l /etc/logrotate.d/
二、按天轮转并保留7份压缩归档
此方案适用于访问量稳定、单日日志体积可控的服务(如nginx access.log),确保每日生成新日志,旧日志以.gz压缩保存,超过7天自动删除。
1、在/etc/logrotate.d/下创建服务专属配置文件:sudo nano /etc/logrotate.d/nginx
2、写入以下内容:
/var/log/nginx/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 0644 www-data www-data
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}
三、按大小触发轮转并限制总占用空间
当某类日志突发增长(如调试模式下的应用日志),仅按时间轮转可能无法及时释放空间。启用size参数可在日志达到指定字节数时立即触发轮转,配合maxsize可避免单次归档过大。
1、新建配置文件:sudo nano /etc/logrotate.d/app-debug
2、填入如下配置:
/var/log/myapp/debug.log {
size 100M
maxsize 200M
rotate 5
compress
copytruncate
missingok
notifempty
}
四、手动强制执行并验证轮转效果
配置完成后不需等待定时任务,可立即运行logrotate进行测试,添加-d参数可模拟执行并输出详细过程,-v参数显示实际动作,避免误删真实日志。
1、执行预演模式查看行为逻辑:sudo logrotate -d /etc/logrotate.conf
2、执行一次真实轮转(仅作用于匹配配置的文件):sudo logrotate -v /etc/logrotate.conf
3、检查归档文件是否生成:ls -lt /var/log/nginx/
4、确认原始日志是否被截断或重建:stat /var/log/nginx/access.log
五、配置systemd timer替代cron调度
部分现代发行版(如Ubuntu 20.04+、CentOS 8+)使用systemd管理logrotate调度,其精度与依赖控制优于传统cron。需禁用crontab中的logrotate条目,并启用对应timer单元。
1、停用cron调度:sudo systemctl mask logrotate.timer
2、启用systemd原生timer:sudo systemctl enable --now logrotate.timer
3、查看下次触发时间:sudo systemctl list-timers logrotate.timer
4、检查timer状态是否活跃:sudo systemctl status logrotate.timer










