暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Linux日志轮转机制logrotate详解(超详细版)

637
今天分享一下日志轮转工具logrotate

日志是排查故障的利剑,但是日志文件不断增长,如果不及时管理,不仅占用大量磁盘空间,还可能导致系统异常甚至宕机。

本篇系统讲解 Linux 下最常用的日志轮转工具——logrotate

1 什么是日志轮转?

日志轮转,简单来说,就是:

定期对日志文件进行归档、压缩、备份,防止日志无限增长,占满服务器磁盘。

日志轮转通常包含以下操作:

  • 将旧日志文件重命名归档(比如加上时间戳)
  • 压缩历史日志以节省空间
  • 限制保留日志数量,超期日志自动删除
  • 可在轮转后执行命令,如通知程序重新生成日志

为什么需要日志轮转?

  • 避免磁盘空间爆满
  • 加快日志检索速度
  • 便于归档和审计

一句话总结:日志轮转,是服务器自我保护的一种能力。

2 什么是 logrotate?

logrotate 是 Linux/Unix 系统中专门用于管理日志轮转的工具。

它具有以下特点:

  • 支持定时自动轮转
  • 可针对不同日志文件制定不同策略
  • 支持压缩、删除、邮件发送等操作
  • 可结合自定义脚本执行复杂操作

大部分 Linux 发行版(如 CentOS、Ubuntu、Rocky Linux)都预装了 logrotate。系统日志、Nginx、MySQL、Tomcat 等日志轮转大多基于它实现。

3 logrotate 安装与基本使用

检查是否安装

在终端执行:

logrotate --version

如果未安装,根据你的系统安装:

RHEL CentOS Rocky Linux:

dnf install -y logrotate

Ubuntu Debian:

sudo apt install -y logrotate

4 logrotate 配置文件详解

logrotate 配置非常灵活,分为两类:

4.1 全局配置文件

/etc/logrotate.conf文件设置服务器的统一默认规则,适用于大多数普通日志

推荐的全局配置:

# 全局轮转周期
weekly                     # 每周轮转一次
rotate 4                   # 保留最近4次的归档
create                     # 每次轮转后新建日志
compress                   # 归档文件 gzip 压缩
delaycompress              # 延迟一轮再压缩
missingok                  # 日志丢失不报错
notifempty                 # 日志为空不轮转
dateext                    # 使用日期作为后缀,如 .log-20250426.gz

# 包含单独服务配置
include etc/logrotate.d

4.2 子配置文件

子配置文件/etc/logrotate.d/*
针对每个应用(如 nginx、mysql、docker)单独定制。

Nginx配置示例:/etc/logrotate.d/nginx

/var/log/nginx/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 nginx adm
    sharedscripts
    postrotate
        [ -s run/nginx.pid ] && kill -USR1 $(cat run/nginx.pid)
    endscript
}

MySQL配置示例:

/var/log/mysql/*.log {
    weekly
    rotate 8
    missingok
    compress
    notifempty
    create 640 mysql mysql
    sharedscripts
    postrotate
        usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf flush-logs
    endscript
}

配置参数详解

指令
说明
daily
/weekly
/monthly
每天/每周/每月轮转
rotate N
保留 N 个轮转文件
compress
使用 gzip 压缩
delaycompress
延迟到下次轮转才压缩
missingok
如果日志不存在,不报错
notifempty
如果日志为空,不轮转
create MODE OWNER GROUP
创建新日志文件并设置权限
postrotate 
endscript
轮转完成后执行脚本,如重载服务

【注意】子配置文件默认会继承全局配置,但可以覆盖!

5 logrotate 工作原理

logrotate 通过定时任务(cron)每天自动执行,流程如下:

  1. 定时触发:由 /etc/cron.daily/logrotate
     脚本调度
  2. 加载配置:读取 /etc/logrotate.conf
     和 /etc/logrotate.d/
    *
  3. 检查日志文件
    • 是否满足轮转条件(时间、大小)
    • 文件是否存在、是否为空
  4. 执行轮转动作
    • 重命名旧日志(加时间后缀)
    • 压缩归档
    • 创建新的日志文件
    • 删除超期的旧日志
  5. 执行钩子脚本(postrotate)

如果一切正常,轮转过程对应用程序是透明的。

6 手动测试与故障排查

有时候需要手动测试 logrotate 是否配置正确,方法如下:

6.1 手动测试单个配置文件

sudo logrotate -f etc/logrotate.d/nginx

6.2 带详细日志模式

sudo logrotate -vf etc/logrotate.d/nginx

  • -f
     强制轮转
  • -v
     显示详细执行过程

常见错误排查:

  • 配置路径错误
  • 权限不足,无法新建日志文件
  • postrotate脚本出错,导致服务无法重新打开日志

查看系统日志 /var/log/messages
 可以帮助进一步排查。

本次分享结束啦,后期会更新更多技术干货文章!感谢点赞关注!
如果需要提供技术支持或添加交流群,加V详聊:lige_linux

往期精彩文章:


K8S命令详解汇总【自用珍藏版】K8S集群部署 | K8S存储实战案例 |
K8S证书续签十年 | K8S部署Prometheus | Rancher部署并接管K8S |
Jenkins安装部署 | Gitlab安装部署 | 服务网格Istio安装及实战 |
搭建企业级Harbor仓库 | K8S对接Harbor仓库 | Docker常用命令汇总 |
Docker无法下载镜像解决办法 | 安装Docker的三种方法 | Docker基础概念汇总 |

Oralce19C RAC集群搭建 | Oracle集群管理命令汇总 | MySQL集群安装部署 |
MySQL一键备份脚本 | MySQL集群目录迁移 | Redis三主三从集群部署 |

150个Linux常用命令 |  8个有趣的Linux命令 | 主流Linux操作系统各版本网卡配置方法汇总,建议收藏!  |
Firewalld防火墙详细讲解 |  构建内部Yum源 | 超全的磁盘扩容方法 | 服务器带外管理知识

文章转载自运维李哥不背锅,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论