轮转与留存的关系
logrotate 是 Linux 上的日志轮转工具,通常由 cron 或 systemd timer 定时触发。它的价值不只是控制磁盘占用:留存期限就是靠轮转频率与保留份数两个参数共同实现的。按日轮转并保留约 190 份,就能覆盖六个月;改留存时长时要同时核对磁盘容量与归档策略,否则可能撑爆磁盘或留不住日志。
基本信息
| 适用平台 | RHEL 系与 Debian 系 Linux,配置放 /etc/logrotate.d/ |
|---|---|
| 触发方式 | cron 定时任务或 systemd timer,默认每日执行 |
| 关键参数 | rotate、compress、create、postrotate |
| 留存换算 | 保留天数 ≈ rotate 份数 × 轮转频率 |
| 权限控制 | 用 create 指定属主与权限,避免日志被改 |
典型使用场景
- 满足留存要求:把六个月留存落到具体配置而非口头承诺
- 控制磁盘:限制单类日志占用,避免写满根分区
- 服务重开文件句柄:轮转后通知 nginx 等程序重新打开日志
- 权限收紧:让审计日志只有指定组可读
- 归档压缩:降低长期留存的存储成本
示例配置(/etc/logrotate.d/nginx-audit)
示例配置(/etc/logrotate.d/nginx-audit)
/var/log/nginx/*.log {
daily # 每天轮转,按天决定留存粒度
rotate 190 # 约六个月(按日轮转,190 份)
missingok # 日志不存在时不报错
notifempty # 空文件不轮转
compress # 归档压缩
delaycompress # 最近一份暂不压缩,便于随时查看
create 0640 www-data adm # 新建文件的属主与权限
sharedscripts # 多个文件只执行一次脚本
postrotate
/usr/sbin/nginx -s reopen >/dev/null 2>&1 || true
endscript
}验证与排错
验证与排错
logrotate -d /etc/logrotate.d/nginx-audit # -d 只看打算做什么,不实际执行
logrotate -f /etc/logrotate.d/nginx-audit # -f 立即强制执行一次
ls -l /var/log/nginx/ | head # 检查轮转与压缩结果
cat /var/lib/logrotate/logrotate.status # 查看上次轮转时间常用指令速查
- daily / weekly / monthly:控制轮转频率,决定留存的粒度
- rotate N:保留份数,与频率共同决定留存天数
- size 与 daily 并列时:任一条件满足就会触发轮转
- dateext:用日期后缀命名归档,便于按日期定位文件
- copytruncate:适合不支持重开句柄的程序,但可能丢少量写入
- create:指定新建文件的属主与权限,让审计日志只有指定组可读
rotate 份数与轮转频率共同决定留存天数;改留存前先核对磁盘容量与集中平台的保留策略。