logrotate и приложение, которое не отпускает файл
Лог ротирован, а место не освободилось: процесс держит удалённый файл открытым.
Классика: лог ротирован, а место на диске не освободилось. df показывает заполненный раздел, du — что всё в порядке. Причина в том, что процесс держит удалённый файл открытым, и ядро не может освободить его блоки.
lsof +L1 | grep deleted
В выводе будет PID и размер. Быстро освободить место без перезапуска можно так:
: > /proc/PID/fd/N
Это обнуляет файл через дескриптор процесса. Метод грубый, но выручает ночью.
Как сделать правильно
- Если приложение умеет переоткрывать лог по сигналу, отправить его в
postrotate, напримерkill -USR1илиsystemctl reload. - Если не умеет — включить
copytruncate. Цена: несколько строк могут потеряться в момент копирования.