日志轮转手动执行命令操作指南

服务器跑着跑着磁盘突然爆了,一查发现是某个服务的日志文件涨到了几十GB。这种情况太常见了,尤其是那些没配置自动轮转的老服务。其实不用等系统自动处理,完全可以手动执行日志轮转命令来快速缓解问题。

为什么需要手动触发日志轮转

大多数 Linux 系统都用 logrotate 管理日志切割,但它默认靠 cron 每天执行一次。如果某天访问量猛增,日志暴涨,等到第二天再处理可能已经迟了。这时候就得主动出手,让 logrotate 马上干活。

怎么手动运行 logrotate

最直接的方式就是用 root 或有权限的用户执行下面这条命令:

/usr/sbin/logrotate -f /etc/logrotate.d/your-service-name

比如你发现 Nginx 的 access.log 太大,可以单独处理它:

/usr/sbin/logrotate -f /etc/logrotate.d/nginx

加上 -f 参数就是强制执行,不管是否满足时间或大小条件,都会立刻做切割。

想全局处理所有服务怎么办

如果你懒得一个个配,也可以直接刷整个配置目录:

/usr/sbin/logrotate -f /etc/logrotate.conf

这会读取主配置文件里的 include 指令,把所有子配置都走一遍。适合在维护窗口统一清理一轮。

执行完之后注意什么

命令跑完不代表万事大吉。得去看看旧日志是不是被重命名了,新日志有没有正常生成。更重要的是:很多服务不会自动打开新文件句柄,得发个 HUP 信号通知它重新加载日志文件。

比如 Nginx 就要补一句:

kill -HUP $(cat /var/run/nginx.pid)

不然你会发现新日志写不进去,老进程还抓着已经被 rename 的文件不放,磁盘空间也释放不了。

临时救急的小技巧

有时候你连 logrotate 配置都没准备好,但当前日志实在太大,就想先切一下再说。可以手动改名日志文件:

mv /var/log/app/access.log /var/log/app/access.log.old

然后通知服务 reload,接着再用 touch 把原文件重建出来:

touch /var/log/app/access.log

这招快,但只是权宜之计。长期还是得配上正确的 logrotate 规则,避免下次再手忙脚乱。