云服务器日志越滚越大?logrotate 三步管住磁盘

举报
yd_266847877 发表于 2026/11/06 09:29:49 2026/11/06
【摘要】 小内存云服务器最怕的不是 CPU 跑满,而是某天早上起来发现磁盘满了,服务一个接一个罢工。查一圈才发现,罪魁祸首往往是日志:nginx 的 access.log、应用的运行日志,一天几百兆,几个月下来几个 G,全躺在 /var/log 里没人管。Linux 自带了一个现成的管家:logrotate。它每天定时跑一次,按规则把旧日志压缩、归档、删除,基本不用你操心。下面三步就能把它用起来。第一...

小内存云服务器最怕的不是 CPU 跑满,而是某天早上起来发现磁盘满了,服务一个接一个罢工。查一圈才发现,罪魁祸首往往是日志:nginx 的 access.log、应用的运行日志,一天几百兆,几个月下来几个 G,全躺在 /var/log 里没人管。

Linux 自带了一个现成的管家:logrotate。它每天定时跑一次,按规则把旧日志压缩、归档、删除,基本不用你操心。下面三步就能把它用起来。

第一步,先看它在不在。大多数发行版默认已经装好并配了 cron,每天凌晨执行一次。跑 ls /etc/logrotate.d/ 看一眼,里面一般已经有 nginx、syslog 这些服务的现成规则,说明它一直在默默干活。确认它在跑,比装它更重要。

第二步,给自己的应用加一条规则。比如你有个应用日志在 /var/log/myapp/app.log,在 /etc/logrotate.d/myapp 里写几行:每天轮转一次,保留 14 天,超过 100M 提前轮转,压缩旧文件,轮转后让应用重新打开日志文件。关键是最后一条:很多程序会一直握着旧文件句柄,日志轮转完如果不通知它,它还会继续往已经改名的旧文件里写,新文件永远是空的。通知方式一般是发个信号,或者用 copytruncate 直接截断原文件,后者简单但有一点丢失正在写入内容的风险,日志量不大的自用场景可以接受。

第三步,验证再走人。写完规则别直接不管,先跑 logrotate -d /etc/logrotate.d/myapp 看模拟输出,确认它会按你想的轮转、压缩、删除;再用 -f 强制跑一次,检查文件是不是真的被切分了、旧文件有没有压缩、应用还在不在正常写日志。这一步花两分钟,省的是半夜磁盘报警爬起来救火的麻烦。

另外两个容易踩的坑:一是别把日志目录设成 777,轮转后权限会跟着乱;二是备份策略要和轮转配合,重要日志先备份再删,logrotate 只负责清理,不负责留底。磁盘空间紧张的机器上,还可以把压缩级别调高一点,省出来的空间比你想的多。

日志管理没有技术含量,纯粹是习惯问题。花十分钟配一次,之后几个月都不用再管磁盘被日志撑爆这件事。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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