linux基础66——logrorate

概述

在 Linux 系统中,日志文件会随着系统运行不断增长,如果不加控制,可能导致磁盘空间耗尽、系统性能下降甚至服务异常 。为了解决这一问题,Linux 提供了 logrotate 工具,用于对日志文件进行自动轮转(rotation)、压缩、删除和归档管理

工作原理

logrotate 的核心思想是:

在合适的时间点,将当前日志文件重命名并创建新日志文件,同时对旧日志进行压缩或删除。

其典型工作流程如下:

  1. 检测日志文件大小或时间
  2. 判断是否满足轮转条件
  3. 重命名当前日志文件
  4. 创建新的日志文件
  5. 执行压缩或删除策略
  6. 可选执行前置 / 后置脚本

logrotate 通常不是常驻进程,而是由 cron 定时任务 触发执行(如每天一次)。

配置结构

1. 主配置文件

bash 复制代码
/etc/logrotate.conf

该文件定义全局默认规则,如轮转周期、压缩策略等。

2. 子配置目录

bash 复制代码
/etc/logrotate.d/

该目录下通常存放各个服务的独立配置文件,如:

text 复制代码
nginx
mysql
syslog
docker

logrotate 在运行时会自动加载该目录下的所有配置文件。

配置文件基本格式

conf 复制代码
/var/log/nginx/*.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    create 0644 nginx nginx
    postrotate
        systemctl reload nginx
    endscript
}

配置由两部分组成:

  • 日志路径
  • 轮转规则块

常用配置参数

1. 轮转周期参数

参数 说明
daily 每天轮转
weekly 每周轮转
monthly 每月轮转
yearly 每年轮转

2. 轮转数量控制

复制代码
rotate 7

含义:

  • 保留最近 7 个历史日志
  • 超过数量的旧日志会被删除

3. 按大小轮转

复制代码
size 100M

当日志大小超过 100MB 时触发轮转,可与时间策略配合使用。

4. 压缩相关参数

参数 说明
compress 使用 gzip 压缩旧日志
delaycompress 延迟一轮再压缩
nocompress 不压缩

delaycompress 常用于仍可能被进程占用的日志文件。

5. 文件存在与空文件控制

参数 说明
missingok 日志不存在时不报错
notifempty 空文件不轮转
ifempty 即使为空也轮转

6. 日志文件创建

复制代码
create 0644 root root

表示:

  • 权限:0644
  • 属主:root
  • 属组:root

7. 文件命名与扩展

参数 说明
dateext 使用日期作为后缀
dateformat 自定义日期格式
extension 指定日志扩展名

示例:

复制代码
dateext
dateformat -%Y%m%d

脚本控制

1. postrotate / prerotate

复制代码
postrotate
    systemctl reload rsyslog
endscript
指令 说明
prerotate 轮转前执行
postrotate 轮转后执行

📌 常用于:

  • 重新加载服务
  • 通知进程重新打开日志文件

2. sharedscripts

复制代码
sharedscripts

表示:

  • 多个日志文件只执行一次脚本
  • 避免重复 reload 服务

logrotate 命令行用法

1. 手动执行 logrotate

复制代码
logrotate /etc/logrotate.conf

2. 调试模式(非常有用)

复制代码
logrotate -d /etc/logrotate.conf

只显示执行过程,不真正轮转日志。

3. 强制轮转

复制代码
logrotate -f /etc/logrotate.conf

无视时间和大小条件,立即轮转。

4. 指定状态文件

复制代码
logrotate -s /var/lib/logrotate/status

状态文件用于记录每个日志上次轮转时间。

常见问题与解决方案

1. 日志轮转后程序仍写旧文件

原因:

  • 程序未重新打开文件描述符

解决:

复制代码
postrotate
    systemctl reload 服务名
endscript

2. 日志不轮转

排查思路:

  1. 使用 -d 查看调试信息
  2. 检查日志路径是否正确
  3. 查看状态文件是否被锁定

3. Docker / 自定义服务日志管理

建议:

  • 使用独立配置文件
  • 明确 size + rotate + compress

总结

logrotate 是 Linux 系统中不可或缺的日志管理工具,它通过灵活的配置机制,实现了日志文件的自动轮转、压缩与清理,有效避免了日志无限增长带来的系统风险。

通过合理配置 logrotate,可以:

  • 保证系统稳定运行
  • 降低磁盘空间压力
  • 提升运维自动化水平
相关推荐
chlk12319 小时前
Linux文件权限完全图解:读懂 ls -l 和 chmod 755 背后的秘密
linux·操作系统
舒一笑19 小时前
Ubuntu系统安装CodeX出现问题
linux·后端
改一下配置文件20 小时前
Ubuntu24.04安装NVIDIA驱动完整指南(含Secure Boot解决方案)
linux
深紫色的三北六号1 天前
Linux 服务器磁盘扩容与目录迁移:rsync + bind mount 实现服务无感迁移(无需修改配置)
linux·扩容·服务迁移
SudosuBash1 天前
[CS:APP 3e] 关于对 第 12 章 读/写者的一点思考和题解 (作业 12.19,12.20,12.21)
linux·并发·操作系统(os)
哈基咪怎么可能是AI2 天前
为什么我就想要「线性历史 + Signed Commits」GitHub 却把我当猴耍 🤬🎙️
linux·github
十日十行3 天前
Linux和window共享文件夹
linux
Sinclair3 天前
简单几步,安卓手机秒变服务器,安装 CMS 程序
android·服务器
木心月转码ing3 天前
WSL+Cpp开发环境配置
linux
Rockbean4 天前
用40行代码搭建自己的无服务器OCR
服务器·python·deepseek