Linux运维必备!logrotate日志轮转神器,再也不怕磁盘被日志占满了

admin 2026-01-15 14:49:41 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文介绍了Linux日志管理工具logrotate,旨在解决日志无限增长导致的磁盘占满问题。文章详细讲解了logrotate的安装、配置规则及工作原理,提供了Nginx和MySQL的实战配置示例,并说明了手动测试与故障排查技巧。通过合理配置logrotate,可实现日志自动归档与清理,提升服务器运行效率。 综合评分: 92 文章分类: 安全工具,安全建设


cover_image

Linux运维必备!logrotate日志轮转神器,再也不怕磁盘被日志占满了

原创

小柳实验室

小柳实验室

2026年1月15日 06:50 湖南

日志是服务器运维的 “故障诊断书”,系统运行状态、应用报错详情全靠它追溯。但日志文件会像滚雪球一样持续增大,不仅吞噬宝贵磁盘空间,还会让日志检索变慢,甚至因磁盘爆满导致系统宕机!

今天就给大家分享Linux系统自带的日志管理神器——logrotate,从原理到实操,教你一键实现日志自动归档、压缩、清理,让日志管理更高效,服务器更稳定~

一、日志轮转:为什么是服务器“必备技能”?

日志轮转本质是一套“日志生命周期管理机制”,核心就是防止日志无限增长,主要解决3大痛点:

  • • 避免磁盘爆满:自动清理超期日志,不让无用日志占用关键磁盘空间;
  • • 提升检索效率:拆分后的日志体积更小,查询特定时间段日志时速度翻倍;
  • • 便于审计归档:按时间戳归档的日志,直接满足合规审计和问题回溯需求。

简单说,日志轮转就像给日志 “定期瘦身+存档”,是服务器自我保护的核心能力~

二、logrotate:Linux默认的日志管理王者

logrotate是Linux/Unix系统默认预装的日志轮转工具(CentOS、Ubuntu、Rocky Linux等主流发行版都自带),之所以成为运维标配,全靠这些核心优势:

  • • 支持按天/周/月,或按日志大小(如100M)触发轮转;
  • • 可给NginxMySQLTomcat等单个应用定制独立规则;
  • • 内置压缩、删除、邮件发送等实用功能;
  • • 支持执行自定义脚本,实现服务重载等复杂操作。

无论是系统日志(/var/log/),还是各类应用日志,其轮转管理大多依赖logrotate实现~

三、快速上手:安装与基础检查

1. 先查是否已安装

终端输入以下命令,输出版本信息说明已预装:

logrotate --version

2. 手动安装(未预装时)

  • • RHEL/CentOS/Rocky Linux:
  dnf install -y logrotate
  • • Ubuntu/Debian:
  sudo apt install -y logrotate

四、配置详解:灵活定制轮转规则

logrotate的配置分“全局配置”和“子配置”,全局定默认规则,子配置针对单个应用定制(优先级更高,可覆盖全局),新手也能轻松上手~

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

定义服务器级默认策略,适用于大多数普通日志,推荐配置(带详细注释):

# 轮转周期:weekly(每周)/daily(每天)/monthly(每月)
weekly
# 保留最近4个归档文件,超期自动删除
rotate 4
# 轮转后自动创建新日志文件
create
# 归档日志用gzip压缩(省空间)
compress
# 延迟压缩:当前轮转日志不压缩,下次再压缩(避免影响应用读写)
delaycompress
# 日志不存在不报错(防止误报)
missingok
# 日志为空时不轮转
notifempty
# 归档文件加日期戳(如access.log-20250426.gz),方便识别
dateext
# 加载应用级子配置
include /etc/logrotate.d

2. 子配置文件:/etc/logrotate.d/

每个应用的独立规则放在/etc/logrotate.d/目录,文件名与应用名一致(如nginx、mysql),直接套用示例即可~

示例1:Nginx日志轮转(/etc/logrotate.d/nginx)

# 匹配Nginx所有日志文件
/var/log/nginx/*.log {
    daily                # 每天轮转(覆盖全局weekly)
    missingok            # 日志不存在不报错
    rotate 14            # 保留14天归档(覆盖全局4次)
    compress             # 压缩归档
    delaycompress        # 延迟压缩
    notifempty           # 空日志不轮转
    create 0640 nginx adm  # 新建日志,权限0640,所有者nginx:adm
    sharedscripts        # 所有日志轮转后只执行1次脚本
    postrotate           # 轮转后重载Nginx,让其写入新日志
        [ -s /run/nginx.pid ] && kill -USR1 $(cat /run/nginx.pid)
    endscript
}

示例2:MySQL日志轮转(/etc/logrotate.d/mysql)

# 匹配MySQL所有日志文件
/var/log/mysql/*.log {
    weekly               # 每周轮转
    rotate 8             # 保留8周(2个月)归档
    missingok            # 日志不存在不报错
    compress             # 压缩归档
    notifempty           # 空日志不轮转
    create 640 mysql mysql  # 新建日志,权限640,所有者mysql:mysql
    sharedscripts        # 统一执行脚本
    postrotate           # 轮转后刷新MySQL日志,避免写入异常
        /usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf flush-logs
    endscript
}

3. 核心参数速查表(新手必备)

| 指令 | 说明 | | — | — | | daily/weekly/monthly | 轮转周期:每天/每周/每月 | | size 100M | 按大小触发(如日志达100M立即轮转) | | rotate N | 保留N个归档文件,超期删除最早的 | | compress | gzip压缩归档(后缀.gz) | | delaycompress | 延迟压缩,当前轮转日志下次再压缩 | | missingok | 日志不存在不报错 | | notifempty | 空日志不轮转 | | create 权限 所有者 组 | 新建日志并指定权限、所有者(如0640 nginx adm) | | postrotate/endscript | 轮转后执行脚本(如重载服务),配合sharedscripts使用 | | dateext | 归档文件加日期戳(如.log-20250426) |

五、工作原理:logrotate如何自动运行?

logrotate的自动执行全靠Linux的cron定时任务,流程超简单:

  1. 1. 定时触发/etc/cron.daily/目录下的logrotate脚本,每天被cron自动执行;
  2. 2. 加载配置:先读全局配置/etc/logrotate.conf,再加载/etc/logrotate.d/所有子配置;
  3. 3. 条件判断:检查日志是否满足轮转条件(时间/大小达标、文件存在且非空);
  4. 4. 执行轮转:重命名旧日志(加日期戳)→ 压缩归档 → 创建新日志 → 删除超期归档;
  5. 5. 执行脚本:若配置了postrotate,自动执行脚本(如重载应用)。

整个过程对应用透明,完全不影响服务正常运行~

六、手动测试+故障排查(避坑必备)

配置完成后一定要手动测试,避免踩坑!

1. 手动测试轮转

(1)强制轮转单个配置

# 强制执行Nginx日志轮转(-f:强制触发)
sudo logrotate -f /etc/logrotate.d/nginx

(2)详细日志模式(推荐)

# -v:显示执行过程,-f:强制轮转,方便排查问题
sudo logrotate -vf /etc/logrotate.d/nginx

2. 常见故障排查

  • • 路径错误:检查日志路径、应用PID路径是否正确(如Nginx的pid是否在/run/nginx.pid);
  • • 权限不足:新日志权限需与应用运行用户匹配(如Nginx用nginx用户,新日志所有者设为nginx);
  • • 脚本报错:手动执行postrotate中的命令,排查是否因PID不存在、命令错误导致失败;
  • • 查看系统日志:通过grep logrotate /var/log/messages(CentOS)或/var/log/syslog(Ubuntu)获取执行日志。

七、总结

logrotate作为Linux运维的“日志管家”,通过简单配置就能实现日志的自动化轮转、压缩、清理,从根本上解决日志无限增长的问题。

无论是单机服务器还是集群环境,合理使用logrotate都能让日志管理更高效,服务器更稳定~ 赶紧收藏起来,下次配置日志轮转直接套用!

📬 关注我

推荐阅读

Redis主从复制深度解析:数据高可用与负载均衡的核心方案

运维必备|Zabbix 从 0 到 1 搭建企业级监控,告警自动喊你处理!

15分钟搞定业务宕机!运维必备排查指南(附实操命令)

SCP 与 rsync 到底怎么选?运维老鸟的文件传输避坑指南

效率拉满!Docker+Nginx 一站式部署 Java(JAR/WAR 通用),运维再也不加班

别再搞混Nginx和OpenResty!90%运维都踩过的坑,一文讲透核心差异

开发运维必备神器!HexHub 一站式搞定数据库、SSH、Docker 所有需求

网络排查神器!掌握 tcpdump,让网络故障无处遁形

MySQL 与 PostgreSQL:两个老对手的技术对决与选型指南

高性能存储刚需党必看!Docker 部署 RustFS,效率直接拉满

别再用第三方短链了!这个开源神器3分钟搭建专属短网址平台

Linux服务器重启后服务不自启?systemd实战指南 + 混沌演练验证

502 Bad Gateway 不是终点:一次生产事故背后的全链路复盘

备份做了,但能恢复吗?MySQL 数据恢复终极指南来了!

Firewalld 实战全攻略:从入门到精通,搭配 ipset 打造高效防护体系!

命令行也能玩转 WebSocket?别再用浏览器调了

MySQL 自动化备份脚本:安全、高效、免维护

Docker磁盘空间告急?3分钟教你彻底清理,释放大量空间!

Nginx 如何正确代理 SSE 与 WebSocket?一篇讲透长连接配置

【实战】打造超强Linux防火墙!10分钟提升服务器安全等级

一个不存在的用户,竟让MySQL 8.4当场崩溃?背后藏着甲骨文不敢明说的安全暗战!

无公网IP!NPS内网穿透终极指南,Docker一键部署

告别 Docker Hub 依赖!从零部署高可用 Harbor 私有镜像仓库


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:小柳实验室 小柳实验室《Linux运维必备!logrotate日志轮转神器,再也不怕磁盘被日志占满了》

评论:0   参与:  0