Назад | Перейти на главную страницу

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

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

Это довольно часто всплывает в интервью ...

Вы хотите обрезать файл, не прерывая процессы? Ценна ли какая-либо информация в файле журнала? В таком случае я обычно обнуляю файл с помощью простой строки bash.

: > /var/log/badlogfile

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

Также см: http://www.cyberciti.biz/faq/truncate-large-text-file-in-unix-linux/

Вы можете поместить его в logrotate, тогда он не выйдет из-под контроля так легко

Если он активно пишется, вам действительно нечего делать с помощью усечения. Единственный вариант - очистить файл (сначала вы можете скопировать его в другое место).

echo "" >/var/log/fileYouWantToEmpty

Таким образом, файл оказывается пустым, но остается тем же файлом / индексом, поэтому он не нарушит работу программы, ведущей журнал.

Вы также можете попробовать cat / dev / null> / var / log /. Но я должен предупредить, что / dev / null не реализован в некоторых старых версиях ...