logrotate отработал по расписанию, в каталоге логов лежат аккуратные app.log, app.log.1.gz, app.log.2.gz — а df -h как показывал диск забитым на 95%, так и показывает. Ни ошибок в cron, ни жалоб в логах самого logrotate. Это не сбой ротации — это её нормальное поведение при одном частом условии: приложение держит старый файл открытым и логrotate не смог сказать ему об этом. Разберёмся, что физически происходит с файлом на диске, когда его переименовывают у процесса из-под ног, и как это чинится без перезапуска сервиса.
Подробнее →