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,可以:

  • 保证系统稳定运行
  • 降低磁盘空间压力
  • 提升运维自动化水平
相关推荐
Chase_______2 分钟前
【Linux指南】:vi编辑器
linux·运维·编辑器
2501_916766545 分钟前
Springboot+vue前后端分离项目部署到云服务器
服务器
礼拜天没时间.10 分钟前
【生产级实战】Linux 集群时间同步详解(NTP + Cron,超详细)
linux·运维·服务器·时间同步·cron·ntp
艾莉丝努力练剑10 分钟前
【Linux进程控制(一)】进程创建是呼吸,进程终止是死亡,进程等待是重生:进程控制三部曲
android·java·linux·运维·服务器·人工智能·安全
NEAI_N11 分钟前
嵌入式 Linux 中 system() 返回值的正确判定
linux·运维·服务器
瀚高PG实验室12 分钟前
无法连接到服务器:连接被拒绝
运维·服务器·瀚高数据库
Jason_zhao_MR13 分钟前
米尔T113核心板的农机中控屏显方案解析
linux·嵌入式硬件·嵌入式·交互
CodeAllen嵌入式23 分钟前
Rust 正式成为 Linux 永久核心语言
linux·开发语言·rust
水天需01035 分钟前
HISTCONTROL 介绍
linux
南工孙冬梅1 小时前
Linux中安装配置nfs
linux·运维·php