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

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/*. Проблема в том, что атрибут устанавливается только на вновь созданные файлы, поэтому возникает желание очистить журнал.

helmingstay
источник
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

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

Matt
источник
На Debian Джесси путь такой /run/log.
Synchro
1
только это помогло мне!
Т.Тодуа
Это правильный на данный момент ответ. Было бы неплохо, если бы команда journalctl могла это сделать, но, похоже, не может.
Кевин Лида
11

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

$ sudo journalctl --vacuum-time=1seconds

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

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

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

sudo rm -rf /run/log/journal/*
Stiv
источник
Я нашел 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).

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

fengye87
источник