Ваша проблема:
Возможно, что запущенная программа все еще удерживает файл.
Ваше решение:
Согласно другим ответам здесь, вы можете просто выключить tomcat, чтобы он не держался за файл.
Если это не вариант, или если вы просто хотите узнать больше, проверьте этот вопрос: Найдите и удалите большие файлы, которые открыты, но были удалены - он предлагает некоторые более жесткие способы борьбы с это может быть более полезным для вашей ситуации.
Подробнее:
Файловая система linux / unix считает "открытые" файлы другим именем для них. rm удаляет «имя» из файла, как видно из дерева каталогов. Пока дескрипторы не закрыты, файлы по-прежнему имеют больше «имен», и поэтому файл все еще существует. Файловая система не получает файлы до тех пор, пока они не будут полностью безымянными.
Это может показаться немного странным, но при таком подходе можно использовать такие полезные вещи, как включение символических ссылок. Символьные ссылки могут рассматриваться как альтернативное имя для того же файла.
Вот почему важно всегда называть ваши языки эквивалентными close () для дескриптора файла, если вы закончили с ним. Это уведомляет ОС о том, что файл больше не используется. Хотя иногда это не помогает - что, скорее всего, имеет место с Tomcat. Обратитесь к Ответу Билла Карвина , чтобы узнать почему.
В зависимости от файловой системы это обычно реализуется как своего рода подсчет ссылок, поэтому здесь не должно быть никаких реальных имен. Также может быть странно, если такие вещи, как stdin и stderr, перенаправляются в файл или другой поток данных (чаще всего это делается с помощью сервисов).
Вся эта идея тесно связана с понятием inode , поэтому, если вы любопытный тип, я бы рекомендовал сначала проверить это.
Обсуждение
Он больше не работает так хорошо, но вы имели обыкновение обновлять всю ОС, запускать новый http-демон с использованием новых библиотек и, наконец, закрывать старый, когда больше клиентов не обслуживается это (выпуская старые ручки). http-клиенты даже не пропустят ритм.
По сути, вы можете полностью уничтожить ядро и все библиотеки "из-под" запущенных программ. Но так как «имя» все еще существует для более старых копий, файл все еще существует в памяти / диске для этой конкретной программы. Тогда это будет вопрос перезапуска всех сервисов и т. Д. Несмотря на то, что это сценарий расширенного использования, это причина, по которой некоторые системы Unix записывают годы безотказной работы.