Предупреждение: идентификация удаленного хоста изменилась!

Содержимое файла удаляется только тогда, когда на него больше нет ссылки. Ссылка на файл может быть записью каталога или дескриптором открытого файла. Когда вы удаляете файл (например, с помощью команды rm ), который все еще открыт для процесса (в данном случае, процесс, который ведет журнал), содержимое файла остается до тех пор, пока процесс не закроет файл.

Самый простой способ избавиться от старых журналов - это

  1. Переместить файл под другое имя, например mv foo.log foo.log.old
  2. Указать процессу повторно открыть файл журнала. Если у процесса нет возможности сделать это, перезапустите его.
  3. Удалите закрытый старый файл журнала ( rm foo.log.old ).

Программа logrotate автоматизирует этот механизм и может быть настроена на то, сколько дней хранить старые журналы. Он также может сжимать старые журналы.

Для шага 2, если вы не можете перезапустить программу и у нее нет возможности повторно открыть свой файл журнала, вы можете попробовать принудительно заставить его повторно открыть файл журнала с помощью отладчика. Однако имейте в виду, что это может привести к сбою программы, если она хранит информацию о файле журнала, который теперь становится несогласованным. Доказательство концепции (помните, что многое может пойти не так с этим; если есть сомнения, просто не делайте этого):

gdb -n $pid -batch -x /dev/stdin <

Альтернативный грубый метод для освобождения некоторого дискового пространства, если вас не волнует что-либо из журналы - это усечение файла. Процесс регистрации будет продолжать запись в той же позиции в файле, но файл станет разреженным файлом . Если вы читаете файл с самого начала, вы получите нулевые байты, но эти нулевые байты занимают на диске всего несколько килобайт.

dd if=/dev/null of=/path/to/foo.log

2
21.12.2017, 17:45
0 ответов

Теги

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