В Linux файловый дескриптор привязан к
inode, а не к имени файла. Если процесс уже открыл лог и пишет в него, удаление файла не освободит место сразу.Поэтому лог корректно очищать без удаления файла:
> application.log
Эта конструкция обнуляет содержимое, но сохраняет тот же
inode и открытый дескриптор.Если нужно урезать файл до конкретного размера, используется
truncate:truncate -s 1M application.log
Команда обрежет файл до 1MB. Она оставляет начало файла и удаляет хвост, то есть будут потеряны последние (самые новые) записи.
Если требуется сохранить последние записи, важно не менять
inode файла.Корректный вариант, перезаписать содержимое в тот же файл:
tail -n 1000 application.log > tmp.log && cat tmp.log > application.log && rm tmp.log
🔥 Так сохраняются последние 1000 строк,
inode остаётся тем же, и сервис продолжит писать в текущий файл.➡️ DevOps Ready | #совет
