Как очистить записи journalctl только для определенного блока?

19

Я потратил несколько дней на написание скрипта на Python и создание для него системного файла systemd. Во время тестирования скрипт регистрировал множество ошибок в journald. Я хотел бы убрать эти ошибки из journald теперь, когда я закончил.

Есть несколько способов очистить весь журнал, как описано здесь: Как очистить journalctl, включая использование journalctl --vacuum-time=2d, использование journalctl --vacuum-size=500Mи временную установку SystemMaxUse=в /etc/systemd/journald.conf очень низкого значения.

Все это, кажется, очищает весь журнал, воздействуя на все юниты. Мне просто нужно очистить записи для одного блока. Это возможно?

Tal
источник
Возможный подход - написать программу, использующую функции журнала libsystemd, чтобы переписать файл журнала без записей, которые вы хотите удалить.
Матиас Рав

Ответы:

6

Используйте мою программу Python 3 copy_journal.py для файлов журнала, /var/log/journalиз которых вы хотите удалить записи.

Например, сделать копию system.journalбез записей журнала для 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
Матиас Рав
источник
-1

Я не думаю, что это возможно, потому что согласно man-странице journalctl «Вывод чередуется из всех доступных файлов журнала, независимо от того, вращаются они или записываются в настоящее время».

Однако вы можете отфильтровать его по модулю - journalctl -u some.service, а затем попытаться удалить записи журнала из журнала с помощью собственного сценария, используя cron.

Recoba20
источник
7
Похоже, вы подразумеваете, что есть способ удалить отдельные записи журнала из journald. Есть один? Это было бы очень полезно.
Tal