So löschen Sie journalctl

209

Ich konnte in Google keinen sicheren Weg finden, um systemd journal zu löschen. Kennt jemand einen sicheren und zuverlässigen Weg, dies zu tun?

Nehmen wir an, ich habe mit etwas experimentiert und meine Protokolle sind mit verschiedenen Fehlermeldungen überfüllt. Außerdem zeige ich mein Tagebuch mit Conky auf meinem Desktop an. Ich möchte diese Fehler wirklich nicht sehen, da sie mich an einen schrecklichen Tag erinnern, an dem ich dieses Zeug repariert habe. Ich möchte mich nach diesem Horror wie ein frischer Mann fühlen. Ich denke, jeder wird zustimmen, dass dies ein triftiger Grund ist, die Protokolle zu löschen: P.

Łukasz Zaroda
quelle

Antworten:

290

Bei der Selbstwartungsmethode werden die Protokolle nach Größe oder Zeit gesaugt.

Behalten Sie nur die letzten zwei Tage:

journalctl --vacuum-time=2d

Behalten Sie nur die letzten 500 MB bei:

journalctl --vacuum-size=500M

man journalctl für mehr Informationen.

Michael
quelle
11
Netter Befehl, hat aber bei mir unter openSUSE 13.2 (der aktuellen stabilen Version) nicht funktioniert. Es ist bekannt, dass Arch bei Kernel- und Userland-Programmen in der Regel auf dem neuesten Stand ist. Daher habe ich spekuliert, dass systemd kürzlich Vakuumoptionen hinzugefügt wurden, die einfach nicht in meine Distribution eingeflossen sind. Bestätigte die Tatsache , hier in Lennart Ankündigung am 10. Dezember 2014 techupdates.com/go/1002774 , dass dieser Befehl in systemd V218 hinzugefügt wurde. Nur diesen Kommentar hinzuzufügen, falls jemand wie ich, der nicht bei Arch ist, ein ähnliches Problem hat. Trotzdem hochgestimmt.
Joshua Huber
Ich habe nur 'journalctl --vacuum-time = 1d' verwendet, um eine Situation zu beheben, in der neue Protokollnachrichten nicht mit 'journalctl -f' angezeigt wurden. Anscheinend war meine Systemzeit vorübergehend für eine Weile um einen Tag nach vorne gesprungen und hatte sich dann erholt, und journalctl verwendete die Protokollereignis-Zeitstempel aus dieser zukünftigen Zeit als Journalende.
user5071535
8
Funktionierte nicht in Version "systemd 229" auf Ubuntu 16.04. journalctl --vacuum-size=1Kdann journalctlzeigt noch viel mehr als 1K. Es werden alle Meldungen seit dem letzten Start angezeigt.
Dan Dascalescu
18
Es scheint, dass dies nur archivierte Protokolle löscht, keine aktiven. Ich habe journalctl --flush --rotatevorher versucht zu rennen journalctl --vacuum-time=1sund es wurden mehr Sachen entfernt, obwohl immer noch nicht alles.
user60039
2
Die Dokumentation erscheint mir nicht so klar. Bleibt es immer auf 2d (in Ihrem Beispiel)? Oder ist 2d von dem Zeitpunkt an, an dem Sie den Befehl ausführen? Vielleicht verstehe ich nicht, wie das genau funktioniert.
Jersey Bean
85

Normalerweise löschen Sie das Tagebuch nicht selbst. Dies wird von systemd selbst verwaltet und alte Protokolle werden beim Eintreffen neuer Daten ausgelagert. Das Richtige ist, Journald so zu planen, dass nur so viele Daten gespeichert werden, wie Sie interessiert sind. Am häufigsten wird die gesamte Festplatte angepasst Raum, den es einnehmen darf. Sobald es diese Grenze überschreitet, beginnt es alte Einträge zu werfen, um in der Nähe dieses Wertes zu bleiben.

Sie können dies folgendermaßen einstellen /etc/systemd/journald.conf:

SystemMaxUse=100M
Caleb
quelle
11
Ok, aber es gibt auch untypische Situationen. Ich weiß, dass die meisten von ihnen nur Ästhetik als Grund sind, aber Ästhetik ist ein triftiger Grund für den Menschen;).
Łukasz Zaroda
2
@ ŁukaszZaroda In diesem Fall müssen Sie "sicher" definieren. Normalerweise ist "Ich möchte etwas wegblasen, für dessen Beibehaltung ein Daemon konfiguriert ist" nicht mit "safe" kompatibel. Wenn Sie es erzwingen möchten, fahren Sie einfach den Dienst herunter und löschen Sie die Protokolldateien. Wenn Sie möchten, dass es normal funktioniert, sollten Sie die Parameter in Ihrer Frage besser definieren. Was meinst du mit "sicher"?
Caleb
Mit "sicher" meine ich, dass es nach dem Löschen wie gewohnt funktioniert und nur vom neuen Ort aus gestartet wird.
Łukasz Zaroda
5
Es mag keine typische Situation sein, aber manchmal ist es notwendig, alte Protokolle aufgrund von Systemfehlern
diffycat
1
Um Protokolle nach einer bestimmten Zeit zu bereinigen, anstatt eine bestimmte Größe zu erreichen, können Sie den Parameter MaxRetentionSecanstelle von festlegen SystemMaxUse. Sehen Sie man journald.conffür weitere Details.
joelostblom
52

Michaels Antwort fehlt eines: Beim Staubsaugen werden nur archivierte, nicht aktive Journaldateien entfernt. Um alles loszuwerden, müssen Sie zuerst die Dateien drehen, damit die zuletzt verwendeten Einträge in inaktive Dateien verschoben werden.

Die vollständige Antwort zum Entfernen aller Einträge scheint also zu sein

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

(Beachten Sie, dass Sie dies nicht zu einem journalctlBefehl kombinieren können .)

Übrigens haben einige Distributionen Journald so konfiguriert, dass es Protokolle auf die Festplatte schreibt ( /var/log/journal), während andere Protokolle im Speicher behalten ( /run/log/journal). Ich gehe davon aus, dass es in einigen Fällen notwendig sein kann, journalctl --flushzuerst zu verwenden, um alles zu entfernen.

Wenn Sie nicht --rotatein Ihrer Version haben, können Sie das --sinceArgument verwenden, um Einträge zu filtern:

--since "2019-01-30 14:00:00"
--since today
Jan Warchoł
quelle
journalctl: nicht erkannte Option '--rotate'
stiv
1
Während ich verstehe, was die anderen Antworten auf mich zukommen (langfristige Strategie), ist die Frage einfach: Wie löschen Sie jetzt Protokolle (vielleicht interessieren Sie sich langfristig nicht für Ihre aktuelle Aufgabe). Dies beantwortet diese Frage, ohne andere Annahmen zu treffen, und trägt zum Verständnis von journalctl bei. Das sollte die Antwort sein.
Marc
1
Dies war die einzige hilfreiche Antwort für mich. Vielen Dank!
Freedo
18

Auf Arch Linux war der nächste, den ich bekam:

  • Bearbeiten Sie /etc/systemd/journald.conf, um SystemMaxUse = 1M festzulegen
  • Journal neu starten: sudo systemctl restart systemd-journald
  • Zurücksetzen von SystemMaxUse = 200M
  • Journal erneut starten

Auf meinem System hat jede Journaldatei eine Größe von 8 MB, und die oben genannten Dateien haben alle bis auf 3 gelöscht, wodurch sich die Gesamtgröße auf ~ 25 MB erhöht.

Mein Anwendungsfall wurde das Deaktivieren CoW für BTRFS (nur für die Zeitschrift Verzeichnis und das Unter): sudo chattr +C /var/log/journal/*. Das Problem ist, dass das Attribut nur für neu erstellte Dateien festgelegt wird und daher das Journal geleert werden soll.

Steuerstand
quelle
4
Ihr Use-Case wurde eigentlich nicht benötigt. Das Deaktivieren von CoW im Journal hat den Zweck, dass häufig darauf geschrieben wird. Das ist bei den alten, gedrehten Journaldateien nicht der Fall, sie sitzen einfach da.
Hjulle
1
Ich habe gesetzt SystemMaxUse=1K, neu gestartet systemd-journald, aber journalctl zeigt noch Einträge, die ich gehen möchte. Wie ist dieser Fortschritt von flachen Textdateien?
Dan Dascalescu
13

Da --vacuum-timeund --vacuum-sizenichts für mich zu tun hat habe ich die folgenden:

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

Es ist nicht richtig, aber es hat funktioniert.

Matt
quelle
Auf Debian Jessie lautet der Pfad /run/log.
Synchro
1
nur das hat mir geholfen!
T.Todua
Dies ist die aktuell richtige Antwort. Es wäre schön, wenn der Befehl journalctl dies tun könnte, aber es scheint nicht möglich zu sein.
Kevin Lyda
11

Eine sehr brachiale Methode, um das gesamte Protokoll zu bereinigen:

$ sudo journalctl --vacuum-time=1seconds

Sie können auch --vacuum-sizeals Michael Mento verwendet werden.

Lanti
quelle
5
Hat nicht funktioniert Einträge für vor 15 Minuten werden immer noch angezeigt, auch nach dem Ausführen systemctl restart systemd-journald.
Dan Dascalescu
1
Hier gilt das gleiche. Das hat auch bei mir nicht geklappt. Ich verwende CentOS7.
Jersey Bean
5

Sowohl --rotate als auch --vacuum-time = 1s haben bei mir unter CentOS nicht funktioniert. Ich konnte es so klären:

sudo rm -rf /run/log/journal/*
stiv
quelle
Ich fand 2 Verzeichnisse mit hexadezimalem Namen in ./journal. Die journalctlBefehle funktionieren nur in der neuesten Version. Also musste ich das alte Verzeichnis manuell löschen und das ist sicher. Nachdem ich gerade die Größe in der Zeitschrift conf begrenzt habe.
KeitelDOG
1
  1. Sichern Sie es für den Fall, dass Sie es in Zukunft benötigen:
    cp /run/log/journal/<temp-string>/system.journal /mylog/dir/back/system.journal.bak

  2. Löschen Sie die Datei:
    cd /run/log/journal/<temp-string>/ >system.journal

  3. Überprüfen Sie, um die neuesten Protokolle anzuzeigen:
    journalctl -xe

Girish KG
quelle
1

journalctl -bwird nur ab dem letzten Start angezeigt. Sie können auch verwenden -b -1, -b -2usw. Ihr schrecklicher Tag ist immer noch da, aber Sie müssen ihn nicht sehen, es sei denn, Sie müssen.

David
quelle
0

Meine vorherige Antwort wurde gerade gelöscht, weil sie "dupliziert" wurde. Tut mir leid, dass ich in meiner vorherigen Antwort nicht klar genug war, aber es war ein Unterschied zu den vorhandenen Antworten. Also hier ist eine ausgearbeitete Version:

journalctl -m --vacuum-time=1shat den Trick für mich getan. Bitte beachten Sie die -mFlagge , sie führt alle Ihre Journale zusammen und räumt sie dann auf. Ohne die -mFlagge hat es in meinem Fall nichts aufgeräumt (unter CentOS-7).

Ich hoffe es hilft.

fengye87
quelle