logrotate按大小轮转需在/etc/logrotate.d/下建独立配置文件,使用size 100M触发切割,配合copytruncate、create等参数保障应用持续写入与权限正确,并通过logrotate -d和-f手动验证。

直接用 size 参数就能让 logrotate 按文件大小触发切割,不依赖时间周期。关键在于配置位置正确、参数组合合理,且要避开常见权限和应用写入冲突问题。
配置文件放在哪里最合适
不要改全局的 /etc/logrotate.conf,除非你想统一影响所有服务。推荐做法是在 /etc/logrotate.d/ 下为每个应用单独建文件,比如:
-
/etc/logrotate.d/nginx管 Nginx 日志 -
/etc/logrotate.d/myapp管自研程序日志
这样修改互不影响,也方便排查和更新。
核心参数怎么写才生效
以切割 /var/log/myapp/app.log 为例,当它超过 100MB 就自动轮转,保留 5 份并压缩:
/var/log/myapp/app.log {
size 100M
rotate 5
compress
missingok
notifempty
copytruncate
create 644 myapp myapp
}
说明:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
-
size 100M:达到 100MB 立即触发(单位支持 K / M / G) -
copytruncate:先复制内容再清空原文件,适合不能重载日志句柄的应用 -
create:新日志文件权限和属主必须明确,否则可能因权限不足导致应用写入失败
怎么确认配置没写错
别等 cron 自动跑,先手动验证:
- 检查语法是否合法:
sudo logrotate -d /etc/logrotate.d/myapp(-d 是调试模式,只模拟不执行) - 强制立即执行一次:
sudo logrotate -f /etc/logrotate.d/myapp(-f 表示强制,会真实切割) - 观察
/var/log/myapp/目录下是否生成了app.log.1或app.log.1.gz
如果报 “Permission denied”,大概率是 create 行的用户组或权限跟应用运行身份不一致。
大小和时间可以一起用吗
可以,但要注意优先级:只要满足 size 条件,哪怕还没到 daily/weekly,也会立刻切割。例如:
/var/log/myapp/app.log {
daily
size 50M
rotate 7
}
意思是:每天检查一次,只要当天日志涨过 50MB 就切;如果一天都没到 50MB,到第二天凌晨也会按 daily 规则切一次。这种组合适合写入不规律但又不想完全放弃时间维度的场景。

















