云服务器日志越滚越大?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 只负责清理,不负责留底。磁盘空间紧张的机器上,还可以把压缩级别调高一点,省出来的空间比你想的多。
日志管理没有技术含量,纯粹是习惯问题。花十分钟配一次,之后几个月都不用再管磁盘被日志撑爆这件事。
- 点赞
- 收藏
- 关注作者
评论(0)