Plainnotes

日志没有轮转,多半是这两个原因

2026-08-29 · 3 分钟系统

/var/log/app.log 涨到几十 G,logrotate.d 里明明写了规则。先手动跑一次看报错:

logrotate -d /etc/logrotate.d/app

-d 是 dry run,会打印它读到了哪些配置、为什么跳过。最常见的两种:

一,文件放在 conf.d 之类的子目录,而 /etc/logrotate.conf 只 include 了 /etc/logrotate.d,配置根本没被读到。

二,轮转之后进程还往旧 inode 写。日志框架打开文件后一直持有 fd,mv 走了它照样写。需要在 postrotate 里给进程发信号重开:

postrotate
    systemctl reload app >/dev/null 2>&1 || true
endscript

copytruncate 也能用,但拷贝和截断之间会丢日志,量大的服务不建议。