Очистка лог файлов под linux

10

Я использую виртуальную машину kvm ubuntu 10.04 для тестирования некоторых функций модуля ядра. Я пролистываю /var/logфайлы, чтобы посмотреть сообщения ядра об этом модуле.

Чтобы начать из чистого состояния, я удаляю файлы журнала, содержащие старые сообщения, выполняя rm -rf /var/log/*и затем перезагружая виртуальную машину. Однако после перезагрузки новые файлы журнала все еще содержат эти старые сообщения журнала. Для удаления этих сообщений из файла журнала требуется около 5-6 циклов удаления файлов и перезагрузки виртуальной машины.

Почему это происходит? Есть ли более простой способ очистки файлов журнала?

contemplatingzombie
источник
logrotateявляется официальным программным обеспечением Linux для автоматического удаления и ротации логов.
Ханан Н.
Я не хотел вращаться. Просто сотри их.
созерцая
1
Мне кажется, что работает следующее: 1. rm -rf / var / log / * 2. dmesg -c 3. reboot Поскольку это работает, я думаю, что ядро ​​при загрузке читает предыдущие сообщения журнала, сохраняет их в буфере и записывает их к файлам еще раз при перезагрузке. Если кто-то знает больше о фактическом механизме, пожалуйста, обновите.
созерцая

Ответы:

7

Самый простой способ очистить старые журналы - не удалять их.

Лучший способ очистить журналы - это logrotateкак указал Ханан Н. или:

find /var/log -type f -exec /bin/cp /dev/null {} \;

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

Обычно, хотя вы не хотите очищать журналы, так как они являются вашей отправной точкой во всем устранении неполадок.

Карлсон
источник
Я думаю, что команда 'cp' скопирует все журналы по последнему расширенному имени файла ... возможно, вы имели в виду find /var/log/* -exec cp /dev/null {} \;:?
jjmontes
@jjmontes Спасибо. Я не мог придумать команду поиска в то время. :) Но на самом деле это изменилось бы так, как я отредактировал
Карлсон
3

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

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

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

BillThor
источник
1

Похоже, что это работает нормально (в Ubuntu LTS 14.04), переместив ваши журналы в чистый журнал, а затем удалив старые записи журнала. Он похож на метод cp / dev / null, но я думаю, что он чище. YMMV

logrotate --force /etc/logrotate.conf
find /var/log/ -name '*[0-5]*' -exec rm {} \;
flickerfly
источник