Cómo borrar journalctl

209

No pude encontrar en google ninguna forma segura de borrar el diario systemd. ¿Alguien conoce alguna forma segura y confiable de hacerlo?

Digamos que estaba experimentando con algo y mis registros se llenaron con varios mensajes de error. Además, estoy mostrando mi diario en mi escritorio usando Conky. Realmente no quiero ver esos errores, ya que me recuerdan un día horrible que estaba arreglando estas cosas, quiero sentirme como un hombre nuevo después de este horror. Creo que todos estarán de acuerdo en que esta es una razón válida para borrar los registros: P.

Łukasz Zaroda
fuente

Respuestas:

291

El método de auto mantenimiento es aspirar los registros por tamaño o tiempo.

Conserve solo los últimos dos días:

journalctl --vacuum-time=2d

Conserve solo los últimos 500 MB:

journalctl --vacuum-size=500M

man journalctl para más información.

Miguel
fuente
11
Buen comando, pero no funcionó para mí en openSUSE 13.2 (la versión estable actual). Se sabe que Arch suele estar a la vanguardia en lo que respecta a los programas kernel y userland, por lo que especulé que las opciones de vacío podrían haberse agregado recientemente a systemd y simplemente no se han precipitado en mi distribución. Confirmó el hecho aquí en el anuncio de Lennart el 10 de diciembre de 2014 techupdates.com/go/1002774 de que este comando se agregó en systemd v218. Solo agregue este comentario en caso de que alguien como yo que no esté en Arch tenga un problema similar. Votado de todos modos.
Joshua Huber el
Acabo de usar 'journalctl --vacuum-time = 1d' para arreglar una situación en la que los nuevos mensajes de registro no se mostraban con 'journalctl -f'. Aparentemente, el tiempo de mi sistema había aumentado temporalmente un día hacia adelante por un tiempo, luego se recuperó, y journalctl estaba usando las marcas de tiempo del evento de registro de ese tiempo futuro como la cola del diario.
user5071535
8
No funcionó en la versión "systemd 229" en Ubuntu 16.04. journalctl --vacuum-size=1Kentonces journalctltodavía muestra mucho más de 1K. Muestra todos los mensajes desde el último arranque.
Dan Dascalescu
18
Parece que esto solo borra los registros archivados, no los activos. Intenté correr journalctl --flush --rotateantes journalctl --vacuum-time=1sy eliminó más cosas, aunque todavía no todo.
user60039
2
La documentación no me parece tan clara. ¿Siempre se mantiene en 2d (en su ejemplo)? ¿O es 2d desde el momento en que ejecuta el comando? Tal vez no entiendo cómo funciona esto exactamente.
jersey bean el
85

Por lo general, no borra el diario usted mismo. Eso es administrado por el sistema mismo y los registros antiguos se rotan a medida que ingresan nuevos datos. Lo correcto sería programar el diario para mantener solo la cantidad de datos que le interese. Lo más habitual para ajustar es el disco total espacio se le permite ocupar. Una vez que cruza esta frontera, comenzará a lanzar entradas antiguas para permanecer cerca de este valor.

Puede configurar esto /etc/systemd/journald.confasí:

SystemMaxUse=100M
Caleb
fuente
11
Ok, pero también hay situaciones atípicas. Sé que la mayoría de ellos es solo la estética como razón, pero la estética es una razón válida para el ser humano;).
Łukasz Zaroda
2
@ ŁukaszZaroda En ese caso, tendrá que definir "seguro". Normalmente "Quiero volar algo que un demonio está configurado para mantener" es incompatible con "seguro". Si desea forzarlo, simplemente cierre el servicio y ponga a cero los archivos de registro. Si desea que funcione normalmente, debe definir mejor los parámetros en su pregunta. ¿Qué quieres decir con "seguro"?
Caleb
Por seguro, quiero decir que después de limpiarlo funcionará como siempre, solo comenzando desde el nuevo lugar.
Łukasz Zaroda
55
Puede que no sea una situación típica, pero a veces es necesario eliminar los registros antiguos debido a algunos errores del sistema, por ejemplo, bbs.archlinux.org/viewtopic.php?pid=1173031#p1173031
diffycat
1
Para limpiar los registros después de un período de tiempo en lugar de cuando alcanzan un cierto tamaño, puede establecer el parámetro en MaxRetentionSeclugar de SystemMaxUse. Ver man journald.confpara más detalles.
joelostblom
52

A la respuesta de Michael le falta una cosa: pasar la aspiradora solo elimina los archivos de diario archivados, no los activos. Para deshacerse de todo, primero debe rotar los archivos para que las entradas recientes se muevan a archivos inactivos.

Entonces, la respuesta completa para eliminar todas las entradas parece ser

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

(Tenga en cuenta que no puede combinar esto en un solo journalctlcomando).

Por cierto, algunas distribuciones han configurado journald para que escriba registros en el disco ( /var/log/journal) mientras que otros mantienen registros en la memoria ( /run/log/journal). Espero que en algunos casos sea necesario usar journalctl --flushprimero para eliminar todo.

Si no tiene --rotateen su versión, puede usar el --sinceargumento para filtrar entradas:

--since "2019-01-30 14:00:00"
--since today
Jan Warchoł
fuente
journalctl: opción no reconocida '--rotate'
stiv
1
mientras entiendo a qué se acercan las otras respuestas (estrategia a largo plazo), la pregunta es simple: ¿cómo borra los registros ahora? (tal vez no esté interesado en el largo plazo para su tarea actual). Esto responde a esa pregunta sin hacer otras suposiciones y agrega otro gran valor a la comprensión de journalctl. Esta debería ser la respuesta.
Marc
1
Esta fue la única respuesta útil para mí. ¡Gracias!
Freedo
18

En Arch Linux, lo más cerca que estuve fue:

  • Edite /etc/systemd/journald.conf para configurar SystemMaxUse = 1M
  • Reinicio del diario: sudo systemctl restart systemd-journald
  • Restableciendo SystemMaxUse = 200M
  • Reiniciar el diario

En mi sistema, cada archivo de diario es de 8 MB, y lo anterior borró todos menos 3, con lo que el tamaño total es de ~ 25 MB.

Mi caso de uso se incapacitante vaca para BTRFS (sólo para el directorio de diario y subdirectorios): sudo chattr +C /var/log/journal/*. El problema es que el atributo solo se establece en archivos recién creados, por lo tanto, el deseo de vaciar el diario.

helmingstay
fuente
44
Su caso de uso en realidad no era necesario. El punto de deshabilitar CoW en el diario es que se escribe con frecuencia. Ese no es el caso de los viejos archivos de diario rotados, simplemente se sientan allí.
Hjulle
1
He configurado SystemMaxUse=1K, reiniciado systemd-journald, pero journalctl todavía muestra las entradas que quiero que desaparezcan. ¿Cómo es este progreso de los archivos de texto plano?
Dan Dascalescu
13

Desde entonces --vacuum-timey --vacuum-sizeno hice nada por mí, hice lo siguiente:

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

No está bien, pero funcionó.

Mate
fuente
En Debian Jessie, el camino es /run/log.
Sincronización del
1
solo esto me ayudó!
T.Todua
Esta es la respuesta correcta actualmente. Sería bueno si el comando journalctl pudiera hacer esto, pero parece incapaz.
Kevin Lyda
11

Un método de fuerza muy bruta para limpiar todo el registro:

$ sudo journalctl --vacuum-time=1seconds

También puede usar --vacuum-sizecomo Michael mentoined.

Lanti
fuente
55
No funciono Las entradas de hace 15 minutos siguen apareciendo, incluso después de ejecutarse systemctl restart systemd-journald.
Dan Dascalescu
1
Igual que aquí. Esto tampoco funcionó para mí. Estoy ejecutando CentOS7.
jersey bean el
5

Tanto --rotate como --vacuum-time = 1s no me funcionaron en CentOS. Pude borrarlo así:

sudo rm -rf /run/log/journal/*
stiv
fuente
Encontré 2 directorios con nombre hexadecimal en ./journal. Los journalctlcomandos solo funcionan en el más reciente. Así que tuve que eliminar el directorio antiguo manualmente y eso es seguro. Después de limitar el tamaño en el diario conf.
KeitelDOG
1
  1. Respalde en caso de que lo necesite en el futuro:
    cp /run/log/journal/<temp-string>/system.journal /mylog/dir/back/system.journal.bak

  2. Borrar el archivo:
    cd /run/log/journal/<temp-string>/ >system.journal

  3. Verifique para ver los últimos registros:
    journalctl -xe

Girish KG
fuente
1

journalctl -bsolo se mostrará desde el arranque más reciente. También puede usar -b -1, -b -2etc. Su horrendo día todavía está allí, pero no tendrá que verlo, a menos que lo necesite.

David
fuente
0

Mi respuesta anterior acaba de ser eliminada por ser "duplicada". Bueno, perdón por no ser lo suficientemente claro en mi respuesta anterior, pero fue diferente de las respuestas existentes. Así que aquí hay una versión más elaborada:

journalctl -m --vacuum-time=1shizo el truco para mí Tenga en cuenta la -mbandera , combina todos sus diarios y luego límpielos. Sin la -mbandera, no limpió nada en mi caso (en CentOS-7).

Espero eso ayude.

fengye87
fuente