¿Cómo borro las entradas de journalctl solo para una unidad específica?

18

Pasé unos días escribiendo un script de python y creando un archivo de unidad systemd para él. Durante las pruebas, el script registró muchos errores en journald. Me gustaría borrar esos errores de journald ahora que he terminado.

Hay varias formas de borrar todo el diario, como se describe aquí: Cómo borrar el diario, incluido el uso journalctl --vacuum-time=2d, el uso journalctl --vacuum-size=500My la configuración temporal SystemMaxUse=en /etc/systemd/journald.conf a un valor muy bajo.

Todo esto parece borrar todo el diario, afectando a todas las unidades. Solo necesito borrar las entradas para una sola unidad. es posible?

Tal
fuente
Un posible enfoque es escribir un programa utilizando las funciones de diario de libsystemd para reescribir el archivo de diario sin las entradas que desea eliminar.
Mathias Rav

Respuestas:

6

Use mi programa Python 3 copy_journal.py en los archivos de diario /var/log/journalde los que desea eliminar entradas.

Por ejemplo, para hacer una copia system.journalsin entradas de registro para 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
fuente
-1

No creo que sea posible, porque de acuerdo con la página de manual de journalctl "La salida se intercala de todos los archivos de diario accesibles, ya sea que estén rotados o que se estén escribiendo actualmente".

Sin embargo, podría filtrarlo por una unidad: 'journalctl -u some.service' y luego tratar de eliminar las entradas de registro del diario con su propio script usando cron.

Recoba20
fuente
77
Parece que estás insinuando que hay una manera de eliminar entradas de registro individuales de journald. ¿Hay uno? Eso sería muy util.
Tal