Logrotate 日志轮转实战:让服务器日志不再撑爆磁盘

举报
yd_282444815 发表于 2026/11/01 10:07:06 2026/11/01
【摘要】 很多服务器故障的起因都平平无奇——磁盘被日志写满了。Nginx、应用服务每天都在追加日志,几个月下来单个日志文件轻松突破几十 GB,轻则服务异常,重则系统只读宕机。本文介绍 Linux 自带的 logrotate 工具,用几分钟配置实现日志自动轮转、压缩和清理。一、logrotate 是什么logrotate 是几乎所有 Linux 发行版预装的日志管理工具。它可以按天、按周或按大小切割日志...

很多服务器故障的起因都平平无奇——磁盘被日志写满了。Nginx、应用服务每天都在追加日志,几个月下来单个日志文件轻松突破几十 GB,轻则服务异常,重则系统只读宕机。本文介绍 Linux 自带的 logrotate 工具,用几分钟配置实现日志自动轮转、压缩和清理。

一、logrotate 是什么
logrotate 是几乎所有 Linux 发行版预装的日志管理工具。它可以按天、按周或按大小切割日志,旧日志压缩归档,超过保留数量的自动删除,全程无需人工干预,是服务器运维的“基础卫生”工具。

二、快速上手:给 Nginx 日志加轮转
配置文件放在 /etc/logrotate.d/ 目录下,以 Nginx 为例新建一个 nginx 文件,内容如下:

/var/log/nginx/*.log {
    daily
    rotate 14
    compress
    delaycompress
    missingok
    notifempty
    create 0644 www-data adm
    sharedscripts
    postrotate
        [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

三、常用指令解释
- daily / weekly / monthly:轮转周期,也可以用 size 100M 按大小轮转。
- rotate 14:保留 14 个历史文件,超出数量的自动删除。
- compress / delaycompress:压缩旧日志;delaycompress 延迟一次压缩,方便排查最近的问题。
- missingok:日志文件不存在也不报错;notifempty:空文件不轮转。
- create:轮转后创建新日志文件,并指定权限和属主。
- copytruncate:直接清空原文件而不是重命名,适合无法重新打开日志文件的程序,但有极小概率丢失几行日志。
- postrotate / endscript:轮转后执行的命令,常用来通知服务重新打开日志文件。

四、测试配置是否正确
不要等到第二天才发现配错了,用 debug 模式预演一次:

logrotate -d /etc/logrotate.d/nginx

加上 -f 参数可以强制立即执行一次,亲眼验证轮转效果。

五、它是怎么定时运行的
logrotate 本身不驻留进程,由 cron 每天调用一次(/etc/cron.daily/logrotate),所以 daily 是最小粒度。如果需要更细的粒度,可以在 cron 里加一条每小时执行的任务。

六、常见坑
1. 服务没有重新打开日志:文件重命名后,进程还在往旧文件(已改名)里写,磁盘空间不释放。务必用 postrotate 发信号通知服务,或改用 copytruncate。
2. 通配符路径写错:/var/log/*.log 和 /var/log/*/*.log 差别很大,配完先用 -d 检查实际匹配了哪些文件。
3. 权限问题:create 指定的用户必须对日志目录有写权限,否则轮转后新日志写不进去。

结语:logrotate 配置简单却极其实用,几乎零成本。花十分钟配好,换来的是再也不用半夜爬起来清理磁盘,建议每台 Linux 服务器都做一遍。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。