Czyszczenie plików dziennika w systemie Linux

10

Używam maszyny wirtualnej kvm ubuntu 10.04 do testowania niektórych funkcji modułu jądra. Przeglądam /var/logpliki, aby obserwować komunikaty jądra dotyczące tego modułu.

Aby rozpocząć od stanu czystego, usuwam pliki dziennika zawierające starsze wiadomości, uruchamiając rm -rf /var/log/*i ponownie uruchamiając maszynę wirtualną. Jednak po ponownym uruchomieniu nowe pliki dziennika nadal zawierają te stare komunikaty dziennika. Usuwanie plików komunikatów i ponowne uruchomienie maszyny wirtualnej zajmuje około 5-6 cykli.

Dlaczego to się dzieje? Czy istnieje łatwiejszy sposób czyszczenia plików dziennika?

kontemplowanie zombie
źródło
logrotateto oficjalne oprogramowanie linux do automatycznego usuwania i obracania logów.
Hanan N.,
Nie chciałem się obracać. Po prostu zetrzyj je.
kontemplując
1
Wydaje mi się, że działają dla mnie: 1. rm -rf / var / log / * 2. dmesg -c 3. reboot Ponieważ to działa, myślę, że jądro czyta poprzednie komunikaty dziennika podczas uruchamiania, trzyma je w buforze i zapisuje je do plików jeszcze raz podczas ponownego uruchamiania. Jeśli ktoś wie więcej na temat faktycznego mechanizmu, zaktualizuj.
kontemplując

Odpowiedzi:

7

Najłatwiejszym sposobem czyszczenia starych dzienników jest ich usunięcie.

Najlepszym sposobem na wyczyszczenie logów jest wskazanie logrotateHanana N. lub:

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

dla każdego z plików dziennika. Nie jestem do końca pewien, do których pozycji dziennika odnosisz się przy poprzednim uruchomieniu, ale jeśli chcesz wyczyścić to po uruchomieniu, możesz umieścić powyższą komendę w /etc/rc.localskrypcie, aby rejestrowanie odbywało się po uruchomieniu.

Zwykle jednak nie chcesz usuwać dzienników, ponieważ są one punktem wyjścia do rozwiązywania problemów.

Karlson
źródło
Myślę, że polecenie „cp” skopiowałoby wszystkie dzienniki z ostatniej rozszerzonej nazwy pliku ... może miałeś na myśli find /var/log/* -exec cp /dev/null {} \;:?
jjmontes
@jjmontes Dziękujemy. Nie mogłem wtedy wymyślić polecenia find. :) Ale tak naprawdę zostałby zmieniony na sposób, który edytowałem
Karlson
3

Do tego, co robisz, może być lepsze dodanie dodatkowego pliku dziennika dla komunikatów jądra. Niektóre demony dziennika umożliwiają wykonanie dopasowań zapisywanych rekordów, dzięki czemu w pliku znajdują się tylko odpowiednie rekordy. Następnie możesz obracać, usuwać lub zmieniać nazwy plików między uruchomieniami. (Jeśli nie uruchomisz się ponownie, może być konieczne wysłanie sygnału HUP do demona dziennika, aby ponownie otworzyć pliki.

Istnieją również narzędzia, które wyodrębnią z dziennika tylko nowe rekordy. logtailNarzędzie z logcheckpakietu jest jednym z takich użyteczności. Można go uruchomić z alternatywnym plikiem przesunięcia.

Istnieją inne narzędzia, które obserwują dzienniki pod kątem rekordów pasujących do wzorca i zgłaszają je. Jeden z nich może działać dobrze dla Ciebie.

BillThor
źródło
1

Wydaje się, że działa to dobrze (w systemie Ubuntu LTS 14.04), obracając dzienniki do czystego dziennika, a następnie usuwając starsze wpisy dziennika. Jest podobny do metody cp / dev / null, ale myślę, że jest czystszy. ymmv

logrotate --force /etc/logrotate.conf
find /var/log/ -name '*[0-5]*' -exec rm {} \;
Flickerfly
źródło