Jak wyczyścić dziennik


208

Nie mogłem znaleźć w Google żadnego bezpiecznego sposobu na wyczyszczenie dziennika systemowego. Czy ktoś zna bezpieczny i niezawodny sposób?

Powiedzmy, że eksperymentowałem z czymś, a moje logi są zaśmiecone różnymi komunikatami o błędach. Ponadto wyświetlam mój dziennik na pulpicie za pomocą Conky. Naprawdę nie chcę widzieć tych błędów, które przypominają mi okropny dzień, kiedy naprawiałem te rzeczy, chcę poczuć się jak nowy mężczyzna po tym horrorze. Myślę, że wszyscy zgodzą się, że jest to uzasadniony powód do wyczyszczenia dzienników: P.

Odpowiedzi:


289

Samoobsługową metodą jest odkurzanie kłód według rozmiaru lub czasu.

Zachowaj tylko dwa ostatnie dni:

journalctl --vacuum-time=2d

Zachowaj tylko ostatnie 500 MB:

journalctl --vacuum-size=500M

man journalctl po więcej informacji.


11
Ładne polecenie, ale nie działało dla mnie w openSUSE 13.2 (bieżąca stabilna wersja). Wiadomo, że Arch jest zwykle w czołówce, jeśli chodzi o programy jądra i przestrzeni użytkownika, więc spekulowałem, że opcje próżni mogły zostać ostatnio dodane do systemd i po prostu nie spadły w mojej dystrybucji. Potwierdził to tutaj w ogłoszeniu Lennarta z 10 grudnia 2014 r. Techupdates.com/go/1002774, że to polecenie zostało dodane w systemd v218. Dodanie tego komentarza, jeśli ktoś inny, jak ja, nie jest na Arch, ma podobny problem. Mimo to głosowano.
Joshua Huber

Użyłem właśnie „journalctl --vacuum-time = 1d”, aby naprawić sytuację, w której nowe komunikaty nie były wyświetlane z „journalctl -f”. Najwyraźniej mój czas systemowy chwilowo przeskoczył o jakiś dzień do przodu, po czym wyzdrowiał, a dziennik używał znaczników czasu zdarzeń dziennika z tego przyszłego czasu jako ogona dziennika.
user5071535

8
Nie działał w wersji „systemd 229” na Ubuntu 16.04. journalctl --vacuum-size=1Knastępnie journalctlnadal pokazuje sposób więcej niż 1K. Pokazuje wszystkie wiadomości od ostatniego uruchomienia.
Dan Dascalescu,

18
Wygląda na to, że usuwa tylko zarchiwizowane dzienniki, a nie aktywne. Próbowałem uruchomiony journalctl --flush --rotateprzed journalctl --vacuum-time=1si usuwa więcej rzeczy, choć jeszcze nie wszystko.
user60039

2
Dokumentacja nie wydaje mi się tak przejrzysta. Czy zawsze pozostaje ustawiony na 2d (w twoim przykładzie)? A może 2d od momentu uruchomienia polecenia? Może nie rozumiem, jak to dokładnie działa.
jersey bean

84

Zwykle sam nie czyścisz dziennika. Tym zarządza sam systemd, a stare dzienniki są wypierane w miarę pojawiania się nowych danych. Właściwe byłoby zaplanowanie w dzienniku przechowywania tylko takiej ilości danych, jaką jesteś zainteresowany. Najczęstszą rzeczą do dostosowania jest całkowity dysk przestrzeń, którą może zająć. Po przekroczeniu tej granicy zacznie rozstawiać stare wpisy, aby pozostać w pobliżu tej wartości.

Możesz to ustawić w następujący /etc/systemd/journald.confsposób:

SystemMaxUse=100M

11
Ok, ale są też nietypowe sytuacje. Wiem, że większość z nich jest tylko estetyką jako powodem, ale estetyka jest ważnym powodem dla człowieka;).
Łukasz Zaroda

2
@ ŁukaszZaroda W takim przypadku musisz zdefiniować „bezpieczny”. Zwykle „Chcę zdmuchnąć coś, co daemon skonfigurował do przechowywania”, jest niezgodne z „bezpiecznym”. Jeśli chcesz to wymusić, po prostu zamknij usługę i wyzeruj pliki dziennika. Jeśli chcesz, aby działał normalnie, lepiej zdefiniuj parametry w pytaniu. Co rozumiesz przez „bezpieczny”?
Caleb

Przez bezpieczny rozumiem, że po wyczyszczeniu będzie działać jak zwykle, zaczynając od nowego miejsca.
Łukasz Zaroda

5
Może to nie być typowa sytuacja, ale czasami konieczne jest usunięcie starych dzienników z powodu błędów systemu, np. Bbs.archlinux.org/viewtopic.php?pid=1173031#p1173031
diffycat

1
Aby wyczyścić dzienniki po pewnym czasie, a nie po osiągnięciu określonego rozmiaru, można ustawić parametr MaxRetentionSeczamiast SystemMaxUse. Zobacz man journald.confpo więcej szczegółów.
joelostblom

52

W odpowiedzi Michaela brakuje jednej rzeczy: odkurzanie usuwa tylko zarchiwizowane pliki dziennika, a nie aktywne. Aby pozbyć się wszystkiego, musisz najpierw obrócić pliki, aby najnowsze wpisy zostały przeniesione do plików nieaktywnych.

Tak więc wydaje się , że pełna odpowiedź na usunięcie wszystkich wpisów jest

journalctl --rotate
journalctl --vacuum-time=1s

(Pamiętaj, że nie możesz tego połączyć w jedno journalctlpolecenie).

Nawiasem mówiąc, niektóre dystrybucje skonfigurowały dziennik tak, aby zapisywał dzienniki na dysku ( /var/log/journal), podczas gdy inne przechowują dzienniki w pamięci ( /run/log/journal). Oczekuję, że w niektórych przypadkach może być konieczne użycie journalctl --flushnajpierw, aby usunąć wszystko.

Jeśli nie masz --rotatewersji, możesz użyć --sinceargumentu do filtrowania wpisów:

--since "2019-01-30 14:00:00"
--since today

journalctl: nierozpoznana opcja '--rotate'
stiv

1
podczas gdy otrzymuję informacje, do których zbliżają się inne odpowiedzi (strategia długoterminowa) - pytanie jest proste: jak teraz wyczyścisz logi (być może nie interesuje Cię długoterminowa realizacja bieżącego zadania). Odpowiada na to pytanie, nie przyjmując innych założeń, i wnosi dodatkową wielką wartość do zrozumienia Journalctl. To powinna być odpowiedź.
Marc

1
To była jedyna pomocna odpowiedź dla mnie. Dzięki!
Freedo

18

W Arch Linuxie najbardziej mi się podobało:

  • Edytuj /etc/systemd/journald.conf, aby ustawić SystemMaxUse = 1M
  • Ponowne uruchamianie dziennika: sudo systemctl restart systemd-journald
  • Resetowanie SystemMaxUse = 200M
  • Ponowne uruchomienie dziennika

W moim systemie każdy plik dziennika ma 8 MB, a powyższe wyczyściło wszystkie oprócz 3, co daje całkowity rozmiar ~ 25 MB.

My use-case został wyłączanie krowa dla Btrfs (tylko dla katalogu dziennika i podkatalogów) sudo chattr +C /var/log/journal/*. Problem polega na tym, że atrybut jest ustawiony tylko na nowo utworzone pliki, a zatem chęć opróżnienia dziennika.


4
Twój przypadek użycia nie był tak naprawdę potrzebny. Chodzi o wyłączenie CoW w czasopiśmie, ponieważ jest on często zapisywany. Tak nie jest w przypadku starych obróconych plików dziennika, po prostu tam siedzą.
Hjulle,

1
Mam ustawiony SystemMaxUse=1K, wznowiona systemd-journald, ale journalctl nadal pokazuje wpisy Chcę zniknął. Jaki jest ten postęp od płaskich plików tekstowych?
Dan Dascalescu,

13

Odtąd --vacuum-timei --vacuum-sizenic dla mnie nie zrobiłem, zrobiłem następujące:

$ sudo find /var/log/journal -name "*.journal" | xargs sudo rm 
$ sudo systemctl restart systemd-journald

To nie w porządku, ale zadziałało.


W Debian Jessie ścieżka jest /run/log.
Synchro

1
tylko to pomogło mi!
T.Todua

To jest obecnie poprawna odpowiedź. Byłoby miło, gdyby komenda journalctl mogła to zrobić, ale wydaje się niemożliwa.
Kevin Lyda

11

Bardzo brutalna metoda czyszczenia całego dziennika:

$ sudo journalctl --vacuum-time=1seconds

Możesz także użyć --vacuum-sizetak, jak powiedział Michael.


5
Nie działało Wpisy sprzed 15 minut wciąż się pojawiają, nawet po uruchomieniu systemctl restart systemd-journald.
Dan Dascalescu,

1
To samo tutaj. To też nie działało dla mnie. Używam CentOS7.
jersey bean

5

Zarówno --rotate, jak i --vacuum-time = 1s nie działały dla mnie na CentOS. Byłem w stanie to wyczyścić w ten sposób:

sudo rm -rf /run/log/journal/*

Znalazłem 2 katalogi z szesnastkową nazwą w ./journal. Te journalctlpolecenia działa tylko w najnowszym jeden. Musiałem więc ręcznie usunąć stary katalog i to jest bezpieczne. Po tym, jak ograniczę rozmiar w conf conf.
KeitelDOG

1
  1. Utwórz kopię zapasową na wypadek, gdybyś jej potrzebował w przyszłości:
    cp /run/log/journal/<temp-string>/system.journal /mylog/dir/back/system.journal.bak

  2. Wyczyść plik:
    cd /run/log/journal/<temp-string>/ >system.journal

  3. Sprawdź, aby zobaczyć najnowsze dzienniki:
    journalctl -xe


1

journalctl -bpokaże tylko od ostatniego rozruchu. Można również użyć -b -1, -b -2itd. Twój przerażające dzień jest nadal istnieje, ale nie będzie musiał go zobaczyć, o ile zajdzie taka potrzeba.


0

Moja poprzednia odpowiedź właśnie została usunięta, ponieważ została „zduplikowana”. Przykro mi, że w mojej poprzedniej odpowiedzi nie byłem wystarczająco jasny, ale różniło się to od istniejących odpowiedzi. Oto bardziej rozbudowana wersja:

journalctl -m --vacuum-time=1szrobił dla mnie lewę. Proszę zauważyć -mflagę , która scala wszystkie twoje dzienniki, a następnie je czyści. Bez -mflagi nic nie wyczyściło w moim przypadku (na CentOS-7).

Mam nadzieję, że to pomoże.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.