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


208

Я не зміг знайти в Google жоден безпечний спосіб очистити журнал systemd. Хтось знає якийсь безпечний і надійний спосіб зробити це?

Скажімо, я щось експериментував, і мої журнали захаращені різними повідомленнями про помилки. Більше того, я показую свій журнал на робочому столі за допомогою Conky. Я дуже не хочу бачити цих помилок, оскільки вони нагадують мені жахливий день, коли я виправляв цей матеріал, я хочу відчувати себе свіжою людиною після цього жаху. Я думаю, всі погодиться, що це поважна причина для очищення журналів: P.

Відповіді:


289

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

Зберігайте лише останні два дні:

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все ще показує шлях більше 1К. Тут відображаються всі повідомлення з моменту останнього завантаження.
Дан Даскалеску

18
Здається, що це очищає лише архівні журнали, а не активні. Я намагався бігати journalctl --flush --rotateраніше, journalctl --vacuum-time=1sі це видалило більше речей, хоча все ще не все.
user60039

2
Документація мені не здається такою зрозумілою. Чи завжди вона встановлена ​​на 2d (у вашому прикладі)? Або 2d з часу запуску команди? Можливо, я не розумію, як саме це працює.
jersey bean

84

Зазвичай ви не очищаєте журнал самостійно. Цим керує сам systemd, а старі журнали повертаються, коли надходять нові дані. Правильним, що потрібно зробити, було б запланувати журнал, щоб зберігати стільки даних, скільки вам цікаво. місця, дозволено займати. Після того, як він перетне цю межу, він почне розбирати старі записи, щоб залишатися біля цього значення.

Ви можете встановити це /etc/systemd/journald.confтак:

SystemMaxUse=100M

11
Гаразд, але бувають і нетипові ситуації. Я знаю, що більшість із них - це лише естетика як причина, але естетика є вагомою причиною для людини;).
Лукаш Зарода

2
@ ŁukaszZaroda У такому випадку вам доведеться визначити "безпечно". Зазвичай "я хочу підірвати те, що демон налаштований для зберігання" є несумісним із "безпечним". Якщо ви хочете змусити його, просто вимкніть службу та скасуйте файли журналів. Якщо ви хочете, щоб це працювало нормально, слід краще визначити параметри у вашому запитанні. Що ви маєте на увазі під "безпечним"?
Калеб

Маючи на увазі, я маю на увазі, що після очищення він буде працювати як завжди, тільки починаючи з нового місця.
Лукаш Зарода

5
Це може бути не типовою ситуацією, але іноді доводиться видаляти старі журнали через деякі помилки systemd, наприклад, bbs.archlinux.org/viewtopic.php?pid=1173031#p1173031
diffycat

1
Щоб очистити журнали через певний проміжок часу, а не тоді, коли вони досягають певного розміру, ви можете встановити параметр MaxRetentionSecзамість SystemMaxUse. Докладніше man journald.confдив.
joelostblom

52

У відповіді Майкла відсутнє одне: вакуумування видаляє лише архівовані файли журналів, а не активні. Щоб позбутися всього, потрібно спершу обертати файли, щоб останні записи перемістилися до неактивних файлів.

Отже, повна відповідь на видалення всіх записів, здається, є

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

(Зверніть увагу, що ви не можете об'єднати це в одну journalctlкоманду.)

До речі, у деяких дистрибутивах журнал налаштований так, що він записує журнали на диск ( /var/log/journal), а інші зберігають журнали в пам'яті ( /run/log/journal). Я очікую, що в деяких випадках може знадобитися спочатку скористатися, journalctl --flushщоб все вийняти.

Якщо у вас немає --rotateверсії, ви можете використовувати --sinceаргумент для фільтрації записів:

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

journalctl: нерозпізнаний варіант '--rotate'
stiv

1
поки я розумію, на що підходять інші відповіді (довгострокова стратегія) - питання просте: як ви очистити журнали зараз (можливо, вас довго не цікавить ваше поточне завдання). Це дає відповідь на це питання, не роблячи інших припущень, і додає іншої великої цінності розумінню журналу. Це має бути відповіддю.
Марк

1
Це була єдина корисна відповідь для мене. Дякую!
Фредо

18

У Arch linux найближче мені було:

  • Відредагуйте /etc/systemd/journald.conf, щоб встановити SystemMaxUse = 1М
  • Журнал перезапуску: sudo systemctl restart systemd-journald
  • Скидання SystemMaxUse = 200М
  • Повторний перезапуск журналу

У моїй системі кожен файл журналу становить 8 Мб, а вище очищено всі, крім 3, загальний розмір становить ~ 25 МБ.

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


4
Ваш кейс фактично не потрібен. Сенс вимкнення CoW в журналі полягає в тому, що до нього часто пишуть. Це не стосується старих обертових файлів журналів, вони просто сидять там.
Hjulle

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

Це не правильно, але це спрацювало.


На Дебіана Джессі шлях є /run/log.
Синхро

1
тільки це мені допомогло!
Т.Тодуа

Це на даний момент правильна відповідь. Було б добре, якби команда journalctl могла це зробити, але виявляється не в змозі.
Кевін Ліда

11

Дуже жорстокий метод очищення всього журналу:

$ sudo journalctl --vacuum-time=1seconds

Ви також можете використовувати --vacuum-sizeяк настановлений Майкл.


5
Не працювало. Записи за 15 хвилин тому все ще з’являються, навіть після запуску systemctl restart systemd-journald.
Дан Даскалеску

1
Те ж саме. Це не працювало і для мене. Я працюю CentOS7.
jersey bean

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.