Как очистить журнал


209

Я не смог найти в Google какой-либо безопасный способ очистить журнал systemd. Кто-нибудь знает какой-либо безопасный и надежный способ сделать это?

Допустим, я экспериментировал с чем-то, и мои журналы были загромождены различными сообщениями об ошибках. Кроме того, я показываю свой журнал на рабочем столе с помощью Conky. Я действительно не хочу видеть эти ошибки, поскольку они напоминают мне ужасный день, когда я исправлял эти вещи, я хочу чувствовать себя свежим человеком после этого ужаса. Я думаю, что все согласятся, что это веская причина для очистки журналов: P.

Ответы:


292

Метод самообслуживания заключается в очистке бревен по размеру или времени.

Сохраняйте только последние два дня:

journalctl --vacuum-time=2d

Оставьте только последние 500 МБ:

journalctl --vacuum-size=500M

man journalctl для дополнительной информации.


11
Хорошая команда, но у меня не работает openSUSE 13.2 (текущий стабильный выпуск). Известно, что Arch обычно находится на переднем крае, когда дело доходит до программ ядра и пользовательских программ, поэтому я предположил, что параметры вакуума могли быть недавно добавлены в systemd и просто не выпали в мой дистрибутив. Здесь, в объявлении Леннарта от 10 декабря 2014 года, techupdates.com/go/1002774 подтвердил тот факт, что эта команда была добавлена ​​в systemd v218. Просто добавьте этот комментарий, если кто-то еще, кроме меня, не имеет Arch, имеет похожую проблему. Все равно проголосовал.
— Джошуа Хубер

Я просто использовал 'journalctl --vacuum-time = 1d', чтобы исправить ситуацию, когда новые сообщения журнала не отображались с 'journalctl -f'. По-видимому, мое системное время на некоторое время временно подскочило на день вперед, затем восстановилось, и journalctl использовал временные метки событий журнала того будущего времени в качестве хвоста журнала.
— user5071535

8
Не работал в версии "systemd 229" в Ubuntu 16.04. journalctl --vacuum-size=1Kзатем journalctlвсе еще показывает путь больше, чем 1K. Он показывает все сообщения с момента последней загрузки.
— Дан Даскалеску

18
Кажется, что это очищает только архивные журналы, а не активные. Я пробовал бегать journalctl --flush --rotateраньше, journalctl --vacuum-time=1sи это убрало больше вещей, хотя все еще не все.
— user60039

2
Документация не кажется мне такой ясной. Всегда ли он установлен на 2d (в вашем примере)? Или 2d с момента запуска команды? Возможно я не понимаю, как это работает точно.
— боб трикотажа

85

Вы обычно не очищаете журнал самостоятельно. Это управляется самим systemd, и старые журналы чередуются по мере поступления новых данных. Правильно было бы запланировать в журнале только столько данных, сколько вам интересно. Наиболее обычная настройка - это общий диск. пространство, которое разрешено занимать. Как только он пересечет эту границу, он начнет разбрасывать старые записи, чтобы оставаться вблизи этого значения.

Вы можете установить это /etc/systemd/journald.confтак:

SystemMaxUse=100M

11
Хорошо, но есть и нетипичные ситуации. Я знаю, что большинство из них - это просто эстетика как причина, но эстетика - это действительная причина для человека;).
— Лукаш Зарода

2
@ ŁukaszZaroda В этом случае вам нужно будет определить «безопасный». Обычно «Я хочу выбросить что-то, что демон настроен сохранить» несовместимо с «безопасным». Если вы хотите принудительно установить его, просто выключите службу и обнулите файлы журнала. Если вы хотите, чтобы он работал нормально, вам следует лучше определить параметры в вашем вопросе. Что вы подразумеваете под "безопасным"?
— Калеб

Под безопасностью я подразумеваю, что после очистки он будет работать как обычно, только начиная с нового места.
— Лукаш Зарода

5
Это может быть не типичная ситуация, но иногда необходимо удалить старые журналы из-за ошибок в системном
— файле

1
Чтобы очистить журналы по истечении определенного периода времени, а не когда они достигают определенного размера, вы можете установить параметр MaxRetentionSecвместо SystemMaxUse. Смотрите man journald.confдля более подробной информации.
— Joelostblom

52

В ответе Майкла не хватает только одного: очистка удаляет только архивные журнальные файлы, а не активные. Чтобы избавиться от всего, нужно сначала повернуть файлы, чтобы последние записи были перемещены в неактивные файлы.

Таким образом, полный ответ на удаление всех записей, кажется,

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

(Обратите внимание, что вы не можете объединить это в одну journalctlкоманду.)

Кстати, в некоторых дистрибутивах journald настроен так, что он записывает логи на disk ( /var/log/journal), а другие хранят логи в памяти ( /run/log/journal). Я ожидаю, что в некоторых случаях может понадобиться использовать journalctl --flushсначала, чтобы удалить все.

Если у вас нет --rotateверсии, вы можете использовать --sinceаргумент для фильтрации записей:

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

journalctl: нераспознанная опция '--rotate'
— stiv

1
в то время как я понимаю, к чему приближаются другие ответы (долгосрочная стратегия), вопрос прост: как очистить журналы сейчас (возможно, вас не интересует долгосрочная задача для текущей задачи). Это отвечает на этот вопрос, не делая других предположений, и добавляет другую большую ценность для понимания journalctl. Это должно быть ответом.
— Марк

1
Это был единственный полезный ответ для меня. Спасибо!
— Фридо

18

На Arch Linux, ближе всего я получил:

  • Отредактируйте /etc/systemd/journald.conf, чтобы установить SystemMaxUse = 1M
  • Перезапуск журнала: sudo systemctl restart systemd-journald
  • Сброс SystemMaxUse = 200M
  • Перезапуск журнала

В моей системе каждый файл журнала имеет размер 8 МБ, и все вышеперечисленное очищается, кроме 3, что приводит к общему размеру ~ 25 МБ.

Мой вариант использование было отключив корову для BTRFS (только для каталога журнала и подкаталогов): sudo chattr +C /var/log/journal/*. Проблема в том, что атрибут устанавливается только на вновь созданные файлы, поэтому возникает желание очистить журнал.


4
Ваш вариант использования на самом деле не был нужен. Смысл отключения CoW в журнале заключается в том, что в него часто пишут. Это не относится к старым повернутым журнальным файлам, они просто сидят там.
— Хюлле

1
Я установил SystemMaxUse=1K, перезапустил systemd-journald, но journalctl по-прежнему показывает записи, которые я хочу пропустить. Как этот прогресс от плоских текстовых файлов?
— Дан Даскалеску

13

Так как --vacuum-timeи --vacuum-sizeничего не сделал для меня, я сделал следующее:

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

Это не правильно, но это сработало.


На Debian Джесси путь такой /run/log.
— Synchro

1
только это помогло мне!
— Т.Тодуа

Это правильный на данный момент ответ. Было бы неплохо, если бы команда journalctl могла это сделать, но, похоже, не может.
— Кевин Лида

11

Очень грубый метод очистки всего журнала:

$ sudo journalctl --vacuum-time=1seconds

Вы также можете использовать в --vacuum-sizeкачестве Майкла Mentoined.


5
Не сработало Записи в течение 15 минут назад все еще отображаются, даже после запуска systemctl restart systemd-journald.
— Дан Даскалеску

1
Тоже самое. Это тоже не сработало для меня. Я использую CentOS7.
— боб трикотажа

5

И --rotate, и --vacuum-time = 1s не работали для меня на CentOS. Я смог очистить это так:

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

Я нашел 2 каталога с шестнадцатеричным именем в ./journal. Эти journalctlкоманды работают только в самом последнем. Поэтому мне пришлось удалить старый каталог вручную, и это безопасно. После я просто ограничить размер в журнале конф.
— KeitelDOG

1
  1. Сделайте резервную копию на случай, если она понадобится вам в будущем:
    cp /run/log/journal/<temp-string>/system.journal /mylog/dir/back/system.journal.bak

  2. Очистить файл:
    cd /run/log/journal/<temp-string>/ >system.journal

  3. Проверьте, чтобы увидеть последние журналы:
    journalctl -xe


1

journalctl -bпокажет только с самой последней загрузки. Вы также можете использовать -b -1и -b -2т. Д. Ваш ужасный день все еще там, но вам не нужно его видеть, если вам не нужно.


0

Мой предыдущий ответ только что был удален за "дублирование". Что ж, извините за то, что не достаточно ясно в моем предыдущем ответе, но это отличалось от существующих ответов. Итак, вот более продуманная версия:

journalctl -m --vacuum-time=1sсделал трюк для меня. Пожалуйста, обратите внимание на -mфлаг , он объединяет все ваши журналы, а затем очищает их. Без -mфлага это ничего не очистило в моем случае (на CentOS-7).

Надеюсь, это поможет.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.