2026-06-29 15:21:01
logrotate 是 Linux 下用于自动管理日志轮转、压缩和删除的工具,通过配置可实现日志文件的定期处理,避免磁盘空间占用和性能影响。 以下是具体配置方法及关键参数说明:
配置步骤定位配置文件
全局配置文件:/etc/logrotate.conf
服务专属配置:/etc/logrotate.d/ 目录下(如 Nginx 的配置文件为 /etc/logrotate.d/nginx)。
编辑服务配置文件以 Nginx 日志为例,创建或修改 /etc/logrotate.d/nginx,内容如下:

daily每天检查日志是否需要轮转(其他选项:weekly、monthly、按文件大小 size 100M)。
rotate 14保留最近 14 份日志(包括当前日志和压缩后的历史日志)。
compress启用压缩,默认使用 gzip 算法(压缩后文件扩展名为 .gz)。
delaycompress延迟一天压缩,即当前日志轮转后不立即压缩,待下一次轮转时再压缩,避免压缩过程影响日志写入。
notifempty仅当日志文件非空时才执行轮转,避免处理空文件浪费资源。
create 0640 www-data adm轮转后创建新日志文件,并设置权限为 0640,属主为 www-data,属组为 adm。
postrotate ... endscript轮转后执行的命令,例如通知 Nginx 重新加载日志文件(通过发送 USR1 信号)。
压缩失败(权限不足)
原因:logrotate 默认以 root 用户运行,但若日志目录权限不足(如属主为其他用户),会导致压缩失败。
解决:确保 create 参数中指定的属主/属组对日志目录有写权限,或手动调整目录权限(如 chmod 755 /var/log/nginx)。
多配置冲突
原因:多个服务配置中重复定义了相同的日志路径或参数。
解决:检查 /etc/logrotate.d/ 下所有配置文件,确保无重复路径;使用 include 指令合并通用配置。
旧日志未清理
原因:rotate 参数未生效,可能是配置错误或权限问题。
解决:运行 logrotate -d /etc/logrotate.d/nginx 模拟执行,查看错误信息;检查日志目录是否有足够磁盘空间。
测试配置
模拟执行:logrotate -d /etc/logrotate.d/nginx(调试模式,不实际执行)。
手动触发:logrotate -vf /etc/logrotate.d/nginx(强制执行一次轮转,用于调试)。
适合压缩的日志
体积增长快的服务日志(如 Web 服务器 Nginx/Apache、数据库 MySQL)。
保留周期较长的日志(如需保留 7 天以上)。
不常访问的历史日志(压缩后不影响日常查询)。
不建议压缩的日志
调试中频繁写入的日志(可关闭压缩或启用 delaycompress)。
实时分析的日志(压缩会引入额外 I/O 开销)。
若需压缩 MySQL 慢查询日志,可创建 /etc/logrotate.d/mysql-slow,内容如下:
/var/log/mysql/mysql-slow.log { weekly rotate 5 compress missingok notifempty create 640 mysql mysql postrotate /usr/bin/mysql -e "FLUSH SLOW LOGS;" endscript}参数说明:
通过合理配置 logrotate,可显著减少日志占用的磁盘空间,同时降低系统维护成本。