комната, не освобождая дисковое пространство

41
задан Ape-inago 4 December 2014 в 23:26
поделиться

8 ответов

Перезапустите кота, если файл используется, и Вы удаляете его, пространство становится доступным, когда тот процесс заканчивается.

67
ответ дан FerranB 27 November 2019 в 00:12
поделиться

Как предложенные другие, файл, вероятно, все еще открыт другими процессами. Узнать тем, которые, можно сделать

lsof /opt/tomcat/logs/catalina.out

, который перечисляет Вас процессы. Вероятно, Вы найдете кота в том списке.

22
ответ дан Johannes Schaub - litb 27 November 2019 в 00:12
поделиться

Ваша проблема:

Его возможное, что под управлением программа все еще держится за файл.

Ваше Решение:

На другие ответы здесь, можно просто завершить работу кота, чтобы мешать ему держаться за файл.

, Если это не опция, или если Вы просто хотите больше деталей, проверьте этот вопрос: Находят и удаляют большие файлы, которые открыты, но были удалены - это предлагает некоторые более резкие способы иметь дело с ним, который может быть более полезен для Вашей ситуации.

<час> [еще 116] Детали:

файловая система linux/unix полагает, что "открытые" файлы другое имя их. комната удаляет "имя" из файла, как замечено в дереве каталогов. Пока дескрипторы не закрываются, файлы все еще имеет больше "имен" и таким образом, файл все еще существует. Файловая система не пожинает файлы, пока они не абсолютно без имени.

Это могло бы казаться немного нечетным, но выполнение его этот путь допускает полезные вещи как включение символьных ссылок. Символьные ссылки можно по существу рассматривать как альтернативное название для того же файла.

Поэтому важно всегда назвать Ваши языки эквивалентными завершению () на дескрипторе файла, если Вы сделаны с ним. Это уведомляет ОС, что файл больше не используется. , Хотя иногда этот наклон помочься - который, вероятно, имеет место с Tomcat. Пошлите к Ответ Bill Karwin читать почему.

В зависимости от файловой системы, это обычно реализуется как своего рода подсчет ссылок, таким образом, не может быть никаких включенных настоящих имен. Это может также стать странным, если вещи как stdin и stderr перенаправляются в файл или другой поток байтов (обычно сделанный с сервисами).

Эта вся эта мысль тесно связана с понятием' inodes', поэтому если бы Вы - любопытный тип, я рекомендовал бы проверить это сначала.

Обсуждение

Это не работает так хорошо больше, но Вы раньше были в состоянии обновить всю ОС, запустить нового http-демона, пользующегося новыми библиотеками, и наконец закрыть старую, когда больше клиентов не обслуживается с ним (выпуск старых дескрипторов). клиенты http даже не пропустили бы удар.

Basicly, можно полностью вытереть ядро и все библиотеки "из-под" запущения программ. Но так как "имя" все еще существует для более старых копий, файл все еще существует в памяти/диске для той конкретной программы. Тогда это был бы вопрос перезапуска всех сервисов и т.д., В то время как это - усовершенствованный сценарий использования, это - причина, почему некоторая система Unix имеет годы времени работы, когда-либо имевшего место.

10
ответ дан Community 27 November 2019 в 00:12
поделиться

Перезапуск Tomcat выпустит любого, содержат Tomcat, имеет на файле. Однако, чтобы не перезапускать Tomcat (например, если это - продуктивная среда и Вы не хотите побеждать сервисы unncessarily), можно обычно просто перезаписывать файл:

cp /dev/null /opt/tomcat/logs/catalina.out

Или еще короче и более прямой:

> /opt/tomcat/logs/catalina.out

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

9
ответ дан Jay 27 November 2019 в 00:12
поделиться

Как FerranB и Paul Tomblin отметили на этом потоке, файл используется, и дисковое пространство не будет освобождено, пока файл не закрывается.

проблема состоит в том, что Вы не можете предупредить, чтобы процесс Catalina закрылся catalina.out, потому что дескриптор файла не находится под контролем процесса Java. Это было открыто перенаправлением ввода-вывода оболочки в catalina.sh при запуске Tomcat. Только путем завершения процесса Catalina может тот дескриптор файла быть закрытым.

существует два решения предотвратить это в будущем:

  • не позволяют выводу из приложений Tomcat входить catalina.out. Вместо этого используйте swallowOutput свойство и настройте каналы журнала для вывода. Журналы, управляемые log4j, могут быть повернуты, не перезапуская процесс Catalina.

  • Изменяют catalina.sh для передачи по каналу вывода к cronolog вместо того, чтобы просто перенаправить к catalina.out. Тот путь cronolog повернет журналы для Вас.

6
ответ дан Bill Karwin 27 November 2019 в 00:12
поделиться

Если что-то все еще будет иметь его открытый, файл на самом деле не уйдет. Вероятно, необходимо предупредить, чтобы catalina так или иначе закрыл и вновь открыл свои файлы журнала.

3
ответ дан Paul Tomblin 27 November 2019 в 00:12
поделиться

Если будет вторая жесткая ссылка на файл тогда, то это не будет удалено, пока это не удалено также.

3
ответ дан BCS 27 November 2019 в 00:12
поделиться

Комната, журналировал/планировал? Попробуйте 'синхронизирующую' команду за силу запись.

-2
ответ дан strager 27 November 2019 в 00:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: