CentOS 7.9 上 nginx 日志一天被切了两次,白天也出现带日期的文件,logrotate -d 里能看到同一个路径被两个配置文件各处理了一遍。
一开始怀疑是「主配置里 include 了两个目录,同一份文件被读两次」,查了一圈,方向不对。
这类报错背后常见的原因有几处,逐个排除就行。/etc/logrotate.d 下遗留了一份旧配置,路径和新的重复。也可能是包管理器升级时又装了一份默认配置,覆盖了原来的规则。
还有一种情况,cron 里除了 logrotate.timer 还有人手写的定时任务。
上来先把所有引用同一个路径的配置找出来
grep -rl '/var/log/nginx' /etc/logrotate.d/ /etc/logrotate.conf
接着删掉旧的那份,只保留一处
ls -l /etc/logrotate.d/ && rm -f /etc/logrotate.d/nginx.old
然后用调试模式确认只剩一条规则
logrotate -d /etc/logrotate.conf 2>&1 | grep -c 'considering log /var/log/nginx/access.log'
剩下的就是确认定时器只有一个来源
systemctl list-timers | grep logrotate && crontab -l | grep logrotate
恢复的判定其实很直接。logrotate -d 里每个日志路径只出现一次,连续观察两天每天只切一份,日期后缀不再重复。
提醒一点。重复切割会让日志被提前压缩甚至丢失一段,排查时先 grep 路径;升级软件包后要复查 drop-in 目录有没有多出新文件。这类问题最好一次改到位,反复小改反而容易把原因搅混。
