Linux JRNLCLNНизкая

Как почистить логи systemd-journald в Linux

Узнайте, как безопасно очистить логи systemd-journald, настроить ограничение размера и автоматическую ротацию журналов.

Обновлено 12 апреля 2026 г.
15-45 мин
Средняя
FixPedia Team
Применимо к:Ubuntu 18.04+Debian 9+CentOS/RHEL 7+Fedora 25+

Введение

Systemd-journald — это системный сервис для сбора и управления логами в современных дистрибутивах Linux. Со временем журналы могут занимать значительный объем дискового пространства, особенно на системах с высокой нагрузкой или длительным временем работы. Это руководство покажет вам, как безопасно очистить логи, настроить их автоматическое обслуживание и предотвратить проблемы с нехваткой места.

Проверка текущего состояния журналов

Перед любыми действиями по очистке рекомендуется проверить текущее состояние логов.

Просмотр размера журналов

Чтобы узнать, сколько места на диске занимают ваши логи journald, выполните:

sudo journalctl --disk-usage

Пример вывода:

Archived and active journals take up 1.2G in the file system.

Просмотр старых записей

Чтобы увидеть самые старые записи в журнале:

sudo journalctl --list-boots | head -5

Эта команда покажет список сеансов загрузки системы с их ID и временными метками.

Методы очистки логов journald

1. Очистка по времени

Удалите все записи журнала старше указанного периода:

# Удалить записи старше 2 дней
sudo journalctl --vacuum-time=2d

# Удалить записи старше 6 месяцев
sudo journalctl --vacuum-time=6months

# Удалить записи старше 1 года
sudo journalctl --vacuum-time=1years

Доступные единицы времени: seconds, minutes, hours, days, weeks, months, years.

2. Очистка по размеру

Ограничьте общий размер журналов, удалив самые старые записи при превышении лимита:

# Ограничить общий размер до 500 МБ
sudo journalctl --vacuum-size=500M

# Ограничить до 1 ГБ
sudo journalctl --vacuum-size=1G

Доступные единицы размера: K, M, G, T.

3. Очистка по количеству файлов

Ограничьте количество файлов журналов, сохраняя только последние N файлов:

# Сохранить только 5 последних файлов журнала
sudo journalctl --vacuum-files=5

4. Полная очистка (с осторожностью!)

Внимание: Эта команда удалит ВСЕ архивные журналы, оставив только активный журнал. Используйте с осторожностью!

# Удалить все архивные журналы
sudo journalctl --vacuum-files=0

# Альтернативный метод (более агрессивный)
sudo journalctl --rotate
sudo journalctl --vacuum-time=1s

Настройка автоматического обслуживания

Конфигурация journald.conf

Основной файл конфигурации находится по пути /etc/systemd/journald.conf. Отредактируйте его для автоматического управления логами:

sudo nano /etc/systemd/journald.conf

Важные параметры для управления размером:

[Journal]
# Максимальный размер хранилища журналов (по умолчанию 10% от раздела)
SystemMaxUse=1G

# Максимальный размер для постоянного хранилища
SystemKeepFree=15%

# Максимальный возраст записей
MaxRetentionSec=1month

# Максимальный размер каждого файла журнала
SystemMaxFileSize=100M

# Максимальное количество файлов журнала
SystemMaxFiles=10

Применение изменений конфигурации

После изменения конфигурации перезагрузите службу journald:

sudo systemctl restart systemd-journald

Проверьте статус службы:

sudo systemctl status systemd-journald

Работа с постоянным хранилищем журналов

Включение постоянного хранения

По умолчанию journald хранит логи только в памяти (/run/log/journal/). Для сохранения логов между перезагрузками:

# Создать директорию для постоянного хранения
sudo mkdir -p /var/log/journal

# Установить правильные права
sudo chown root:systemd-journal /var/log/journal
sudo chmod 2755 /var/log/journal

# Перезапустить journald
sudo systemctl restart systemd-journald

Отключение постоянного хранения

Если вы хотите вернуться к хранению только в памяти:

sudo rm -rf /var/log/journal
sudo systemctl restart systemd-journald

Просмотр и фильтрация логов

Полезные команды для работы с журналом

# Просмотр логов в реальном времени
sudo journalctl -f

# Просмотр логов за последний час
sudo journalctl --since "1 hour ago"

# Просмотр логов конкретной службы
sudo journalctl -u nginx.service

# Просмотр логов с приоритетом ошибок и выше
sudo journalctl -p err

# Экспорт логов в файл
sudo journalctl --since "2024-01-01" --until "2024-01-31" > january-logs.txt

Поиск в логах

# Поиск по ключевому слову
sudo journalctl -g "error"

# Поиск по идентификатору процесса
sudo journalctl _PID=1234

# Комбинированная фильтрация
sudo journalctl -u sshd _PID=1182 --since today

Мониторинг и автоматизация

Создание задачи cron для регулярной очистки

Добавьте в crontab регулярную задачу очистки:

sudo crontab -e

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

# Очищать логи journald каждое воскресенье в 3:00
0 3 * * 0 /usr/bin/journalctl --vacuum-time=2weeks

Скрипт для мониторинга размера логов

Создайте скрипт для проверки и уведомления о большом размере логов:

#!/bin/bash
# /usr/local/bin/check-journal-size.sh

THRESHOLD=800M
CURRENT_SIZE=$(journalctl --disk-usage | awk '{print $7$8}' | sed 's/\.//')

# Преобразуем порог в байты для сравнения
if [[ "$THRESHOLD" == *G ]]; then
  THRESHOLD_BYTES=$(echo ${THRESHOLD%G}*1024*1024*1024 | bc)
elif [[ "$THRESHOLD" == *M ]]; then
  THRESHOLD_BYTES=$(echo ${THRESHOLD%M}*1024*1024 | bc)
fi

if [ $(echo "$CURRENT_SIZE > $THRESHOLD_BYTES" | bc) -eq 1 ]; then
  echo "Внимание: Логи journald превысили порог $THRESHOLD"
  echo "Текущий размер: $CURRENT_SIZE"
  # Здесь можно добавить отправку email или другое уведомление
fi

Сделайте скрипт исполняемым:

sudo chmod +x /usr/local/bin/check-journal-size.sh

Устранение неполадок

Логи не очищаются после выполнения команд

Если место на диске не освободилось после очистки:

  1. Проверьте, не заблокированы ли файлы журналов:
sudo lsof /var/log/journal/
  1. Перезапустите службу journald:
sudo systemctl restart systemd-journald
  1. Проверьте, нет ли жестких ссылок:
sudo find /var/log/journal -type f -links +1

Ошибка "No space left on device"

Если система сообщает о нехватке места из-за логов:

  1. Очистите логи в аварийном режиме:
# Переключиться в single-user mode
sudo systemctl rescue

# Принудительно очистить логи
sudo journalctl --vacuum-size=100M
  1. Или очистите через временное перенаправление:
sudo journalctl --vacuum-size=100M 2>/dev/null || true

Лучшие практики

  1. Регулярный мониторинг: Раз в неделю проверяйте размер логов.
  2. Сезонная настройка: Увеличивайте лимиты в периоды высокой нагрузки.
  3. Резервное копирование: Перед массовой очисткой экспортируйте важные логи.
  4. Документирование: Записывайте все изменения конфигурации.
  5. Тестирование: Проверяйте команды очистки на тестовой среде перед использованием в production.

Заключение

Правильное управление логами systemd-journald — важная часть администрирования Linux систем. Регулярная очистка и настройка автоматического обслуживания помогут предотвратить проблемы с нехваткой дискового пространства и сохранить систему в оптимальном состоянии. Используйте методы, описанные в этом руководстве, для поддержания баланса между доступностью исторических данных и эффективным использованием ресурсов.

Часто задаваемые вопросы

Безопасно ли очищать логи journald?
Логи очистились, но место на диске не освободилось?
Как посмотреть текущий размер логов?

Полезное

Проверьте размер логов
Настройте автоматическую очистку