logrotate и приложение, которое не отпускает файл

Лог ротирован, а место не освободилось: процесс держит удалённый файл открытым.

· 2 мин

Классика: лог ротирован, а место на диске не освободилось. df показывает заполненный раздел, du — что всё в порядке. Причина в том, что процесс держит удалённый файл открытым, и ядро не может освободить его блоки.

lsof +L1 | grep deleted

В выводе будет PID и размер. Быстро освободить место без перезапуска можно так:

: > /proc/PID/fd/N

Это обнуляет файл через дескриптор процесса. Метод грубый, но выручает ночью.

Как сделать правильно

  • Если приложение умеет переоткрывать лог по сигналу, отправить его в postrotate, например kill -USR1 или systemctl reload.
  • Если не умеет — включить copytruncate. Цена: несколько строк могут потеряться в момент копирования.

logbookdev — записки инженера эксплуатации. Нашли неточность или знаете способ лучше — значит, будет следующая запись.

Ещё по теме

Архив →