Come cancellare journalctl


209

Non sono riuscito a trovare in Google un modo sicuro per cancellare il journal di systemd. Qualcuno conosce un modo sicuro e affidabile per farlo?

Diciamo che stavo sperimentando qualcosa e i miei registri sono stati ingombra di vari messaggi di errore. Inoltre sto visualizzando il mio diario sul desktop usando Conky. Non voglio davvero vedere quegli errori mentre mi ricordano un brutto giorno che stavo sistemando queste cose, voglio sentirmi un uomo nuovo dopo questo orrore. Penso che tutti saranno d'accordo sul fatto che questo è un motivo valido per cancellare i registri: P.

Risposte:


291

Il metodo di manutenzione automatica consiste nell'aspirare i tronchi per dimensione o tempo.

Conservare solo gli ultimi due giorni:

journalctl --vacuum-time=2d

Conserva solo gli ultimi 500 MB:

journalctl --vacuum-size=500M

man journalctl per maggiori informazioni.


11
Bel comando, ma non ha funzionato per me su openSUSE 13.2 (l'attuale versione stabile). È noto che Arch è generalmente all'avanguardia quando si tratta di programmi kernel e userland, quindi ho ipotizzato che le opzioni di vuoto potrebbero essere state recentemente aggiunte a systemd e semplicemente non sono precipitate nella mia distribuzione. Confermato il fatto qui nell'annuncio di Lennart del 10 dicembre 2014 techupdates.com/go/1002774 che questo comando è stato aggiunto in systemd v218. L'aggiunta di questo commento in caso di qualcun altro come me che non è su Arch ha un problema simile. Voto comunque.
Joshua Huber,

Ho appena usato 'journalctl --vacuum-time = 1d' per risolvere una situazione in cui i nuovi messaggi di registro non venivano visualizzati con 'journalctl -f'. Apparentemente il mio tempo di sistema era temporaneamente saltato di un giorno in avanti per un po ', poi si è ripreso e journalctl stava usando i timestamp degli eventi di log di quel tempo futuro come coda del journal.
user5071535

8
Non ha funzionato nella versione "systemd 229" su Ubuntu 16.04. journalctl --vacuum-size=1Kquindi journalctlmostra ancora molto più di 1K. Mostra tutti i messaggi dall'ultimo avvio.
Dan Dascalescu,

18
Sembra che questo cancella solo i log archiviati, non quelli attivi. Ho provato a correre journalctl --flush --rotateprima journalctl --vacuum-time=1se ho rimosso più cose, anche se non tutto.
user60039

2
La documentazione non mi sembra così chiara. Rimane sempre impostato su 2d (nel tuo esempio)? O è 2d dal momento in cui si esegue il comando? Forse non capisco come funzioni esattamente.
fagiolo jersey

85

Di solito non cancelli tu stesso il diario. Questo è gestito da systemd stesso e i vecchi registri vengono ruotati via via che arrivano nuovi dati. La cosa giusta da fare sarebbe programmare il journal in modo da conservare solo tutti i dati che ti interessano. La cosa più normale da regolare è il disco totale spazio che è consentito occupare. Una volta che attraversa questo confine, inizierà a lanciare vecchie voci per rimanere vicino a questo valore.

Puoi impostarlo in questo /etc/systemd/journald.confmodo:

SystemMaxUse=100M

11
Ok, ma ci sono anche situazioni atipiche. So che la maggior parte di essi è solo l'estetica come ragione, ma l'estetica è una ragione valida per l'essere umano;).
Łukasz Zaroda,

2
@ ŁukaszZaroda In tal caso dovrai definire "sicuro". Normalmente "Voglio spazzare via qualcosa che un demone è configurato per mantenere" è incompatibile con "sicuro". Se si desidera forzarlo, basta arrestare il servizio e azzerare i file di registro. Se vuoi che funzioni normalmente dovresti definire meglio i parametri nella tua domanda. Cosa intendi con "sicuro"?
Caleb,

Per sicurezza, intendo che dopo aver eliminato funzionerà come al solito, a partire dal nuovo posto.
Łukasz Zaroda,

5
Potrebbe non essere una situazione tipica, ma a volte è necessario eliminare i vecchi registri a causa di alcuni bug di systemd, ad esempio bbs.archlinux.org/viewtopic.php?pid=1173031#p1173031
diffycat

1
Per pulire i log dopo un periodo di tempo anziché quando raggiungono una determinata dimensione, è possibile impostare il parametro MaxRetentionSecanziché SystemMaxUse. Vedi man journald.confper maggiori dettagli.
joelostblom,

52

Alla risposta di Michael manca una cosa: passare l'aspirapolvere rimuove solo i file journal archiviati, non quelli attivi. Per sbarazzarsi di tutto, è necessario prima ruotare i file in modo che le voci recenti vengano spostate in file inattivi.

Quindi, la risposta completa per rimuovere tutte le voci sembra essere

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

(Nota che non puoi combinarlo in un solo journalctlcomando.)

A proposito, alcune distribuzioni hanno configurato journald in modo che scriva i log su disk ( /var/log/journal) mentre altri mantengono i log in memoria ( /run/log/journal). Mi aspetto che in alcuni casi potrebbe essere necessario utilizzare journalctl --flushprima per rimuovere tutto.

Se non lo hai --rotatenella tua versione, puoi utilizzare l' --sinceargomento per filtrare le voci:

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

journalctl: opzione non riconosciuta '--rotate'
stiv

1
mentre ottengo ciò che le altre risposte si stanno avvicinando (strategia a lungo termine) - la domanda è semplice: come cancellate i registri ora (forse non siete interessati a lungo termine per il vostro compito attuale). Questo risponde a questa domanda senza fare altre ipotesi e aggiunge un altro grande valore alla comprensione di journalctl. Questa dovrebbe essere la risposta.
Marc,

1
Questa è stata l'unica risposta utile per me. Grazie!
Freedo,

18

Su Arch Linux, il più vicino che ho ottenuto è stato:

  • Modifica /etc/systemd/journald.conf per impostare SystemMaxUse = 1M
  • Riavvio del diario: sudo systemctl restart systemd-journald
  • Ripristino di SystemMaxUse = 200M
  • Riavvio del diario

Sul mio sistema, ogni file journal è di 8 MB e quanto sopra cancellato tutti tranne 3, portando la dimensione totale a ~ 25 MB.

Il mio caso d'uso è stato invalidante Mucca a BTRFS (solo per la directory di giornale e le sottodirectory): sudo chattr +C /var/log/journal/*. Il problema è che l'attributo è impostato solo sui file appena creati, quindi il desiderio di svuotare il diario.


4
Il tuo caso d'uso non era effettivamente necessario. Il punto di disabilitare CoW sul diario è che viene spesso scritto. Questo non è il caso dei vecchi file journal ruotati, sono semplicemente seduti lì.
Hjulle,

1
Ho impostato SystemMaxUse=1K, riavviato systemd-journald, ma journalctl mostra ancora le voci che voglio andare. In che modo questo progresso dai file di testo flat?
Dan Dascalescu,

13

Dal momento --vacuum-timeche --vacuum-sizenon ho fatto nulla per me, ho fatto quanto segue:

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

Non è giusto, ma ha funzionato.


Su Debian Jessie, il percorso è /run/log.
Synchro,

1
solo questo mi ha aiutato!
T.Todua,

Questa è la risposta attualmente corretta. Sarebbe bello se il comando journalctl potesse farlo ma sembra impossibile.
Kevin Lyda,

11

Un metodo di forza molto bruta per pulire l'intero registro:

$ sudo journalctl --vacuum-time=1seconds

Puoi anche usarlo --vacuum-sizecome Michael mentato.


5
Non ha funzionato Le voci di 15 minuti fa vengono ancora visualizzate, anche dopo l'esecuzione systemctl restart systemd-journald.
Dan Dascalescu,

1
Anch'io. Neanche questo ha funzionato per me. Sto usando CentOS7.
fagiolo jersey

5

Sia --rotate che --vacuum-time = 1s non hanno funzionato per me su CentOS. Sono stato in grado di cancellarlo in questo modo:

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

Ho trovato 2 directory con nome esadecimale in ./journal. I journalctlcomandi funzionano solo nel più recente. Quindi ho dovuto eliminare manualmente la vecchia directory e questo è sicuro. Dopo aver appena limitato le dimensioni nel journal conf.
KeitelDOG

1
  1. Eseguire il backup nel caso in cui sia necessario in futuro:
    cp /run/log/journal/<temp-string>/system.journal /mylog/dir/back/system.journal.bak

  2. Cancella il file:
    cd /run/log/journal/<temp-string>/ >system.journal

  3. Controlla per vedere gli ultimi registri:
    journalctl -xe


1

journalctl -bmostrerà solo dall'avvio più recente. Puoi anche usare -b -1, -b -2ecc. La tua giornata orribile è ancora lì ma non dovrai vederla, a meno che non sia necessario.


0

La mia risposta precedente è appena stata cancellata per essere stata "duplicata". Beh, scusami per non essere stato abbastanza chiaro nella mia risposta precedente, ma era diverso dalle risposte esistenti. Quindi, ecco una versione più elaborata:

journalctl -m --vacuum-time=1sha fatto il trucco per me. Si prega di notare la -mbandiera , unisce tutti i tuoi diari e poi li pulisce. Senza la -mbandiera, non ha ripulito nulla nel mio caso (su CentOS-7).

Spero che sia d'aiuto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.