好的阿杰,我们来系统讲解一下 Linux 自带的日志管理神器 logrotate,帮你理解原理、使用方法和高级技巧。


1️⃣ 什么是 logrotate

logrotate 是 Linux 系统自带的 日志轮转工具,用于:

  • 自动按大小或时间切割日志
  • 自动压缩旧日志(节省磁盘空间)
  • 删除过期日志
  • 配合 cron 定时执行,实现 自动化日志管理

为什么需要它
日志文件如果无限增长,会占满磁盘,导致系统崩溃。logrotate 就像“日志保姆”,帮你管理日志生命周期。


2️⃣ logrotate 的配置结构

logrotate 的配置文件主要有两个:

  1. 全局配置文件
/etc/logrotate.conf

  1. 单独应用配置文件(通常在 /etc/logrotate.d/ 目录下)
/etc/logrotate.d/nginx
/etc/logrotate.d/mysql

全局配置示例

# 每天轮转日志
daily

# 保留最近 7 个轮转文件
rotate 7

# 压缩旧日志
compress

# 日志轮转时以 root 身份运行
create 0640 root adm

# include 指定单独应用日志配置
include /etc/logrotate.d


3️⃣ 单独日志配置示例

以 Nginx 日志为例:

/var/log/nginx/*.log {
    daily                # 每天轮转
    rotate 14            # 保留 14 个轮转文件
    missingok            # 日志文件不存在也不报错
    notifempty           # 日志为空时不轮转
    compress             # 轮转后压缩日志
    delaycompress        # 延迟压缩,上一个日志文件先保留未压缩
    sharedscripts        # 多个日志共享同一个脚本
    postrotate
        systemctl reload nginx > /dev/null 2>/dev/null
    endscript
}

配置解析:

配置项作用
daily/weekly/monthly日志轮转周期
rotate N保留最近 N 个轮转日志
compress压缩旧日志(gzip)
delaycompress保留最近一个旧日志不压缩(方便分析)
missingok日志不存在也不报错
notifempty日志为空不轮转
postrotate/endscript轮转后执行命令,如重新加载服务

4️⃣ 常用 logrotate 命令

  • 测试配置(不实际轮转,查看效果):
logrotate -d /etc/logrotate.conf

  • 手动轮转
logrotate -f /etc/logrotate.conf

  • 查看 logrotate 版本
logrotate -v


5️⃣ 高级技巧

  1. 按大小轮转日志
/var/log/myapp.log {
    size 100M      # 日志文件达到100MB就轮转
    rotate 10
    compress
}

  1. 结合 cron 定时执行
  • 通常系统自带:
/etc/cron.daily/logrotate

  • 也可以自定义:
*/30 * * * * /usr/sbin/logrotate -f /etc/logrotate.conf

  1. 多日志共享 postrotate 脚本
sharedscripts
postrotate
    systemctl reload nginx
    systemctl reload php-fpm
endscript

  1. 邮件通知
mail admin@example.com
mailfirst

  • 轮转日志时,邮件发送通知。

6️⃣ logrotate 工作原理

  1. 读取配置文件,确定轮转策略
  2. 检查日志文件是否符合轮转条件(周期/大小)
  3. 重命名日志文件
    • access.log → access.log.1
    • 压缩旧日志 access.log.2.gz
  4. 新建空日志文件,保证服务写日志不出错
  5. 执行 postrotate 脚本,如重载服务

原理图示(文字版)

access.log
   │
   ▼
access.log.1  ← 压缩 → access.log.2.gz
   │
   ▼
新建空日志 access.log
   │
   ▼
执行 postrotate 脚本


7️⃣ 注意事项

  1. 服务必须支持日志重开(reload / reopen)
  2. 轮转频率:频繁轮转会增加磁盘 I/O
  3. 保留策略:日志量大时,合理设置 rotate 数量,避免磁盘满