Como limpar journalctl

209

Não consegui encontrar no google nenhuma maneira segura de limpar o diário systemd. Alguém conhece alguma maneira segura e confiável de fazer isso?

Digamos que eu estava experimentando alguma coisa e meus logs foram desordenados com várias mensagens de erro. Além disso, estou exibindo meu diário na área de trabalho usando o Conky. Eu realmente não quero ver esses erros, pois eles me lembram um dia terrível em que eu estava consertando essas coisas, eu quero me sentir como um homem novo depois desse horror. Acho que todos concordarão que esse é um motivo válido para limpar os logs: P.

Łukasz Zaroda
fonte

Respostas:

290

O método de manutenção automática é aspirar os logs por tamanho ou tempo.

Guarde apenas os últimos dois dias:

journalctl --vacuum-time=2d

Mantenha apenas os últimos 500 MB:

journalctl --vacuum-size=500M

man journalctl Para maiores informações.

Michael
fonte
11
Bom comando, mas não funcionou para mim no openSUSE 13.2 (a atual versão estável). Sabe-se que o Arch geralmente está na vanguarda quando se trata de programas de kernel e de usuário, então especulei que opções de vácuo poderiam ter sido adicionadas recentemente ao systemd e simplesmente não precipitaram na minha distribuição. Confirmei o fato aqui no anúncio de Lennart em 10 de dezembro de 2014 techupdates.com/go/1002774 de que este comando foi adicionado no systemd v218. Basta adicionar este comentário caso alguém como eu que não esteja no Arch tenha um problema semelhante. Votado de qualquer maneira.
Joshua Huber
Acabei de usar 'journalctl --vacuum-time = 1d' para corrigir uma situação em que novas mensagens de log não eram exibidas com 'journalctl -f'. Aparentemente, o tempo do meu sistema saltou temporariamente cerca de um dia adiante por um tempo, depois se recuperou, e o journalctl estava usando os registros de data e hora do evento de log daquele momento futuro como o final do diário.
user5071535
8
Não funcionou na versão "systemd 229" no Ubuntu 16.04. journalctl --vacuum-size=1Kem seguida, journalctlainda mostra muito mais do que 1K. Ele mostra todas as mensagens desde a última inicialização.
Dan Dascalescu 10/09/16
18
Parece que isso limpa apenas os logs arquivados, não os ativos. Eu tentei correr journalctl --flush --rotateantes journalctl --vacuum-time=1se ele removeu mais coisas, embora ainda não seja tudo.
user60039
2
A documentação não me parece tão clara. Ele sempre fica definido como 2d (no seu exemplo)? Ou é 2D a partir do momento em que você executa o comando? Talvez eu não esteja entendendo como isso funciona exatamente.
feijão Camisa
85

Normalmente você não limpa o diário sozinho. Isso é gerenciado pelo próprio systemd e os logs antigos são rotacionados à medida que novos dados são recebidos. A coisa certa a fazer seria agendar o journald para manter apenas os dados de seu interesse. A coisa mais comum a ser ajustada é o disco total espaço que é permitido ocupar. Depois de cruzar esse limite, ele começará a lançar entradas antigas para permanecer perto desse valor.

Você pode configurá-lo da seguinte /etc/systemd/journald.confmaneira:

SystemMaxUse=100M
Caleb
fonte
11
Ok, mas também há situações atípicas. Eu sei que a maioria deles é apenas estética como razão, mas estética é uma razão válida para o ser humano;).
Asukasz Zaroda
2
@ ŁukaszZaroda Nesse caso, você terá que definir "seguro". Normalmente "eu quero afastar algo que um daemon está configurado para manter" é incompatível com "seguro". Se você deseja forçar, basta desligar o serviço e zerar os arquivos de log. Se você deseja que ele funcione normalmente, defina melhor os parâmetros em sua pergunta. O que você quer dizer com "seguro"?
Caleb
Por segurança, quero dizer que, após a limpeza, funcionará normalmente, apenas começando do novo local.
Łukasz Zaroda
5
Pode não ser situação típica, mas às vezes é necessário para apagar registros antigos devido a erros de alguns Systemd, por exemplo bbs.archlinux.org/viewtopic.php?pid=1173031#p1173031
diffycat
11
Para limpar os logs após um período de tempo, e não quando atingem um determinado tamanho, você pode definir o parâmetro em MaxRetentionSecvez de SystemMaxUse. Veja man journald.confpara mais detalhes.
Joelostblom 29/0318
52

A resposta de Michael está faltando uma coisa: aspirar apenas remove os arquivos de diário arquivados, não os ativos. Para se livrar de tudo, você precisa girar os arquivos primeiro, para que as entradas recentes sejam movidas para arquivos inativos.

Portanto, a resposta completa para remover todas as entradas parece ser

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

(Observe que você não pode combinar isso em um journalctlcomando.)

A propósito, algumas distribuições têm o journald configurado para gravar registros no disco ( /var/log/journal) enquanto outras mantêm registros na memória ( /run/log/journal). Espero que, em alguns casos, seja necessário usar journalctl --flushprimeiro para remover tudo.

Se você não possui --rotatesua versão, pode usar o --sinceargumento para filtrar entradas:

--since "2019-01-30 14:00:00"
--since today
Jan Warchoł
fonte
journalctl: opção não reconhecida '--rotate'
stiv
11
enquanto eu entendo o que as outras respostas estão abordando (estratégia de longo prazo) - a pergunta é simples: como você limpa os logs agora (talvez você não esteja interessado no longo prazo para sua tarefa atual). Isso responde a essa pergunta sem fazer outras suposições e agrega outro grande valor ao entendimento do journalctl. Essa deve ser a resposta.
Marc
11
Esta foi a única resposta útil para mim. Obrigado!
Freedo 10/09
18

No Arch linux, o mais próximo que cheguei foi:

  • Edite /etc/systemd/journald.conf para definir SystemMaxUse = 1M
  • Reiniciando o diário: sudo systemctl restart systemd-journald
  • Redefinindo SystemMaxUse = 200M
  • Reiniciando o diário

No meu sistema, cada arquivo de diário tem 8 MB, e os itens acima foram limpos, exceto 3, elevando o tamanho total para ~ 25 MB.

Meu caso de uso foi a desativação da vaca para o Btrfs (apenas para o diretório diário e subdiretórios): sudo chattr +C /var/log/journal/*. O problema é que o atributo é definido apenas em arquivos recém-criados, portanto, o desejo de liberar o diário.

helmingstay
fonte
4
Seu caso de uso não era realmente necessário. O objetivo de desativar o CoW no diário é que ele é frequentemente gravado. Esse não é o caso dos antigos arquivos de diário rotacionados, eles apenas ficam lá.
Hjulle
11
Eu configurei SystemMaxUse=1K, reiniciei systemd-journald, mas o journalctl ainda mostra as entradas que eu quero que sejam removidas. Como é esse progresso dos arquivos de texto simples?
Dan Dascalescu 10/09/16
13

Desde --vacuum-timee --vacuum-sizenão fez nada por mim, fiz o seguinte:

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

Não está certo, mas funcionou.

Matt
fonte
No Debian Jessie, o caminho é /run/log.
Synchro
11
só isso me ajudou!
T.Todua
Esta é a resposta correta no momento. Seria bom se o comando journalctl pudesse fazer isso, mas parece incapaz.
Kevin Lyda 26/09
11

Um método de força bruta para limpar todo o log:

$ sudo journalctl --vacuum-time=1seconds

Você também pode usar --vacuum-sizecomo Michael mencionado.

Lanti
fonte
5
Não funcionou. As entradas de 15 minutos atrás ainda são exibidas, mesmo após a execução systemctl restart systemd-journald.
Dan Dascalescu 10/09/16
11
O mesmo aqui. Isso não funcionou para mim também. Estou executando o CentOS7.
jersey bean
5

--Rotate e --vacuum-time = 1s não funcionaram para mim no CentOS. Eu era capaz de limpá-lo assim:

sudo rm -rf /run/log/journal/*
stiv
fonte
Encontrei 2 diretórios com nome hexadecimal em ./journal. Os journalctlcomandos funcionam apenas no mais recente. Então eu tive que excluir o diretório antigo manualmente e isso é seguro. Depois de limitar o tamanho no diário conf.
KeitelDOG 19/02
1
  1. Faça backup caso precise, no futuro:
    cp /run/log/journal/<temp-string>/system.journal /mylog/dir/back/system.journal.bak

  2. Limpe o arquivo:
    cd /run/log/journal/<temp-string>/ >system.journal

  3. Verifique para ver os registros mais recentes:
    journalctl -xe

Girish KG
fonte
1

journalctl -bserá exibido apenas a partir da inicialização mais recente. Você também pode usar -b -1, -b -2etc. Seu dia horrível ainda está lá, mas você não precisará vê-lo, a menos que precise.

David
fonte
0

Minha resposta anterior foi excluída por ser "duplicada". Bem, desculpe-me por não ter sido suficientemente claro na minha resposta anterior, mas era diferente das respostas existentes. Então, aqui está uma versão mais elaborada:

journalctl -m --vacuum-time=1sfez o truque para mim. Observe a -mbandeira , ela mescla todos os seus diários e depois os limpa. Sem a -mbandeira, ela não limpou nada no meu caso (no CentOS-7).

Espero que ajude.

fengye87
fonte