Jak wyczyścić wpisy dziennika dla konkretnej jednostki?

19

Spędziłem kilka dni, pisząc skrypt Pythona i tworząc dla niego plik jednostki systemowej. Podczas testowania skrypt zarejestrował wiele błędów w dzienniku. Chciałbym usunąć te błędy z dziennika teraz, kiedy skończyłem.

Istnieje kilka sposobów na wyczyszczenie całego dziennika, jak opisano tutaj: Jak wyczyścić dziennik, w tym użycie journalctl --vacuum-time=2d, użycie journalctl --vacuum-size=500Mi tymczasowe ustawienie SystemMaxUse=w /etc/systemd/journald.conf bardzo niskiej wartości.

Wszystkie wydają się usuwać cały dziennik, wpływając na wszystkie jednostki. Muszę tylko wyczyścić wpisy dla jednej jednostki. czy to możliwe?

Tal
źródło
Możliwym podejściem jest napisanie programu przy użyciu funkcji dziennika libsystemd w celu przepisania pliku dziennika bez wpisów, które chcesz usunąć.
Mathias Rav,

Odpowiedzi:

6

Użyj mojego programu Python 3 copy_journal.py na plikach dziennika, /var/log/journalz których chcesz usunąć wpisy.

Na przykład, aby wykonać kopię system.journalbez wpisów w dzienniku dla NetworkManager.service:

$ journalctl --file=system.journal | wc
    167    1934   18825
$ journalctl --file=system.journal | grep -v NetworkManager | wc
     77     881    8421
$ python3 copy_journal.py --remove-unit=NetworkManager.service system.journal system-without-nm.journal
$ journalctl --file=system-without-nm.journal | wc
     77     881    8421
Mathias Rav
źródło
-1

Nie sądzę, żeby było to możliwe, ponieważ według strony man czasopisma „Wyjście jest przeplatane ze wszystkich dostępnych plików dziennika, niezależnie od tego, czy są one obracane, czy są w trakcie pisania”.

Można go jednak przefiltrować według jednostki - „journalctl -u some.service”, a następnie spróbować usunąć wpisy dziennika z dziennika własnym skryptem za pomocą crona.

Recoba20
źródło
7
Wygląda na to, że sugerujesz, że istnieje sposób na usunięcie poszczególnych pozycji dziennika z dziennika. Czy jest jeden To byłoby bardzo pomocne.
Tal