Linux

Настройка journald в Linux: управление логами и ротацией

Научитесь управлять системным журналом Linux через systemd-journald. Вы узнаете, как ограничить размер логов, настроить персистентное хранение и настроить автоматическую очистку.

Обновлено 7 апреля 2026 г.
10-15 мин
Средняя
FixPedia Team
Применимо к:Ubuntu 20.04+Debian 11+Fedora 34+CentOS Stream 9+

Зачем настраивать journald

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

Требования и подготовка

Перед началом убедитесь, что у вас есть доступ к учётной записи с правами sudo или root. Конфигурация универсальна для современных систем, использующих systemd. Проверьте текущий статус службы и путь хранения:

journalctl --disk-usage
systemctl status systemd-journald

Если команда --disk-usage показывает 0B или путь указывает на /run/log/journal, значит постоянная запись отключена и её нужно включить.

Шаг 1: Открытие конфигурационного файла

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

sudo nano /etc/systemd/journald.conf

Все активные настройки уже содержатся в секции [Journal]. Остальные строки начинаются с # и являются комментариями с описанием параметров. Вам не нужно переписывать файл — достаточно раскомментировать и изменить нужные строки.

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

Найдите директиву Storage и измените её значение на persistent. Это переключает режим хранения с временного на дисковый:

Storage=persistent

⚠️ Важно: После изменения этого параметра systemd автоматически создаст директорию /var/log/journal/ при следующем запуске службы. Убедитесь, что на корневом разделе достаточно свободного места.

Шаг 3: Ограничение размера и времени хранения

Чтобы журнал не разросся до критических значений, задайте жёсткие лимиты. Добавьте или раскомментируйте следующие параметры в той же секции [Journal]:

# Максимальный объём, который займут логи на диске
SystemMaxUse=1G
# Максимальный размер одного файла журнала
SystemMaxFileSize=100M
# Период хранения записей (в данном случае 4 недели)
MaxRetentionSec=4week
# Интервал синхронизации с диском в секундах
SyncIntervalSec=5m

Параметр SystemMaxUse гарантирует, что journald автоматически удалит самые старые файлы, как только общий размер превысит 1 ГБ. SyncIntervalSec предотвращает потерю данных при внезапном отключении питания, регулярно сбрасывая буфер на диск.

Шаг 4: Перезапуск службы

systemd не перечитывает конфигурационные файлы динамически. Примените изменения командой перезапуска:

sudo systemctl restart systemd-journald

Если служба не перезапустилась или упала с ошибкой, проверьте журнал самой службы для поиска синтаксических опечаток:

sudo journalctl -xeu systemd-journald.service

Убедитесь, что вы не допустили ошибок в именах директив и единицах измерения.

Проверка корректности настроек

Убедитесь, что логи теперь сохраняются в постоянном хранилище:

ls -la /var/log/journal/

Проверьте актуальный размер журнала:

journalctl --disk-usage

Вывод должен показать ненулевой объём, например Archived and active journals take up 256.0M in the file system. Запустите тестовую записи и найдите её:

logger "Тестовое сообщение FixPedia"
journalctl -n 5

Если ваше сообщение появилось в конце вывода, конфигурация работает штатно.

Решение типичных проблем

Служба не запускается после правок. Чаще всего причина — некорректный формат значения. systemd строго проверяет единицы измерения (K, M, G, T для размера; sec, min, hour, week для времени). Восстановите оригинальный файл из резервной копии или пакета дистрибутива, если правка сломала внутренний парсер.

Логи всё ещё исчезают после перезагрузки. Проверьте права владельца на директорию /var/log/journal/. Она должна принадлежать root:systemd-journal и иметь права 2775. Исправьте их командой:

sudo chown root:systemd-journal /var/log/journal/
sudo chmod 2775 /var/log/journal/

Диск быстро заполняется, несмотря на лимиты. Убедитесь, что не запущены сторонние логгеры, дублирующие вывод journald, или приложения с агрессивным выводом в stdout/stderr. Временно очистите старые записи без удаления конфига:

sudo journalctl --vacuum-time=2weeks
sudo journalctl --vacuum-size=500M

Это мгновенно освободит место, после чего встроенная ротация продолжит работу в автоматическом режиме.

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

Безопасно ли удалять старые логи journald вручную?
Почему логи исчезают после каждой перезагрузки системы?
Можно ли отправлять записи journald напрямую в rsyslog?
Как быстро отфильтровать логи конкретного сервиса?

Полезное

Откройте конфигурационный файл journald
Включите персистентное хранение
Настройте лимиты размера и времени
Примените изменения и проверьте работу