logrotate是Linux日志管理核心工具,通过定时轮转、压缩、删除日志文件防止磁盘占满;其配置文件位于/etc/logrotate.conf和/etc/logrotate.d/目录,支持按时间或大小切割,常用参数包括daily、rotate、compress等,并可通过postrotate脚本通知服务重载日志,确保日志持续写入。

Linux系统运行过程中会产生大量日志,长期积累不仅占用磁盘空间,还会影响日志检索效率。合理配置日志切割是系统管理的重要环节。最常用的工具是 logrotate,它能自动对日志文件进行轮转、压缩、删除等操作,保障系统稳定运行。
logrotate 简介与基本原理
logrotate 是 Linux 发行版中预装的日志管理工具,通过定时任务(通常由 cron 每日执行)检查配置文件并处理指定日志文件。其核心功能包括:
- 按大小或时间(每日、每周、每月)切割日志
- 压缩旧日志以节省空间
- 保留指定数量的旧日志版本
- 切割后可执行自定义脚本(如重启服务)
配置文件一般位于:/etc/logrotate.conf,而具体服务的日志规则通常放在 /etc/logrotate.d/ 目录下。
配置日志切割示例
以 Nginx 的访问日志为例,创建配置文件 /etc/logrotate.d/nginx:
/var/log/nginx/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 0644 www-data adm
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}
参数说明:
- daily:每天轮转一次
- missingok:日志文件不存在时不报错
- rotate 7:保留最近 7 个备份
- compress:使用 gzip 压缩旧日志
- delaycompress:延迟压缩,最新一份不立即压缩
- notifempty:日志为空时不轮转
- create:轮转后创建新日志文件,并设置权限和属主
- sharedscripts:所有日志只执行一次 postrotate 脚本
- postrotate ... endscript:通知 Nginx 重新打开日志文件
手动测试与调试技巧
在修改配置后,建议先手动测试,避免出错:
- 模拟运行(不实际执行):
logrotate -d /etc/logrotate.d/nginx - 强制执行一次轮转:
logrotate -f /etc/logrotate.conf - 查看 logrotate 执行记录:
检查 /var/lib/logrotate/status 或系统日志 /var/log/syslog
若发现服务未正确重载日志,重点检查 postrotate 脚本中的进程 ID 文件路径和信号发送方式。
高级配置与管理建议
针对不同场景,可调整策略提升管理效率:
- 大流量服务可设 size 100M 替代时间触发,防止单日志过大
- 生产环境慎用 copytruncate,虽无需通知服务但可能丢失末尾日志
- 集中式日志系统中,可关闭压缩或减少保留份数,交由 ELK 或 Loki 处理
- 定期检查磁盘使用:du -sh /var/log/*,预防日志撑满分区
基本上就这些。logrotate 配置灵活,结合实际需求调整参数,能有效控制日志规模,提升系统可维护性。关键是确保轮转后服务能正常写入新日志,避免“日志失踪”问题。










