logrotate按size切割不生效主因是未被定时任务触发、父目录权限不安全或配置未被加载;需检查include语句、文件权限、selinux上下文及定时器状态。

logrotate 按 size 切割不生效,八成不是配置写错了,而是根本没被触发、权限卡住、或路径不匹配。直接改完 size 100M 就以为能跑,容易掉进几个静默失败的坑里。
logrotate -d 输出 “log does not need rotating” 是什么信号
这行输出最常见于两种情况:一是日志文件实际没达到你设的 size,二是 logrotate 认为“上次已处理过”,但状态文件没更新或误判了时间/大小。它不报错,只跳过——所以你手动 logrotate -f 能成功,定时却失效,基本可以锁定是触发机制或状态判断问题。
- 用
stat /var/log/myapp/app.log看当前大小,确认是否真超了size 100M(注意单位:100M= 100 MiB ≈ 104857600 字节) - 查状态文件:
cat /var/lib/logrotate.status | grep app.log,看最后记录的时间和大小是否合理;如果时间远早于现在,但文件又确实变大了,说明 logrotate 没真正执行过那轮判断 -
size和daily/weekly是“或”关系:满足任一条件就触发。如果你同时写了size 100M和daily,而文件当天没到 100M,它就不会动——删掉daily只留size才是纯按大小驱动
/etc/logrotate.d/ 下的配置文件为什么被忽略
logrotate 主配置 /etc/logrotate.conf 必须包含 include /etc/logrotate.d,否则整个目录下的文件全不加载。很多精简系统或容器镜像里这行被注释或删掉了。
- 运行
grep -r "include" /etc/logrotate.conf,确保输出是include /etc/logrotate.d(不能带#,路径不能多空格或拼错) - 检查你的配置文件权限:
ls -l /etc/logrotate.d/myapp,必须是-rw-r--r--(即 644),如果是 600 或 755,logrotate 会静默跳过 - 文件名不能以
.或~开头,也不能含空格或特殊字符;/etc/logrotate.d/myapp.conf这种带.conf后缀的,部分版本也不识别
父目录权限错误导致 skipping “because parent directory has insecure permissions”
这是最典型的静默失败:logrotate 发现日志所在目录(比如 /data/logs/cloud/)是 777 或组可写但非 root 组,就直接跳过整个 glob 匹配,连试都不试。
- 错误信息里明确说 “parent directory has insecure permissions”,不是日志文件本身,是它的上层目录
- 临时修复:用
chmod 755 /data/logs /data/logs/cloud(去掉 group/world write 权限) - 若必须保留宽松权限(如开发环境),加
su root root到配置块里,让 logrotate 以 root 身份执行轮转操作 - SELinux 启用时也常拦截,尤其在 CentOS/RHEL 上;用
ls -Z /var/log/nginx/看上下文,若不是var_log_t,补一句chcon -Rv --type=var_log_t /path/to/logs
定时任务没跑,logrotate 就只是个摆设
logrotate 本身不常驻,全靠 cron 或 systemd timer 触发。新版 systemd 默认启用 logrotate.timer,但老系统或容器里可能压根没开。
- 查定时器状态:
systemctl list-timers | grep logrotate(有输出且 next 时间正常才表示在跑) - 没有?检查
/etc/cron.daily/logrotate是否存在且可执行;若用 cron,确认crond服务在运行,且没被anacron或资源限制干扰 - 手动模拟定时行为:
sudo run-parts --report /etc/cron.daily,看是否报错或跳过你的配置 - 调试时别只信
logrotate -f,它绕过所有定时逻辑;要验证真实效果,得等 cron 自然触发,或用logrotate -vf /etc/logrotate.d/myapp强制走完整流程
按大小切割真正难的不是写 size,而是让 logrotate 在正确时间、用正确身份、带着正确上下文,去读那个它“看得见也碰得着”的文件。权限、路径、触发链,漏一环,就安静地不干活。











