Введение
systemd-journald — это компонент systemd, отвечающий за сбор, хранение и обработку системных журналов в Linux. Ошибки journald могут привести к прекращению записи логов, что серьёзно затрудняет диагностику проблем в системе. В этой статье рассмотрим основные причины ошибок journald и практические способы их устранения, которые помогут восстановить нормальную работу журналирования.
Причины ошибок journald
Ошибки journald обычно вызваны следующими факторами:
- Нехватка дискового пространства: journald записывает логи на диск, и если место заканчивается, служба может завершиться с ошибкой "No space left on device".
- Повреждение файлов журнала: внезапные перезагрузки или сбои могут привести к повреждению файлов в
/var/log/journal/. - Некорректная конфигурация: ошибки в файле
/etc/systemd/journald.conf(например, неверные пути или параметры) вызывают сбои службы. - Конфликты с другими службами логирования: если параллельно работают rsyslog, syslog-ng или другие демоны, они могут конфликтовать за доступ к файлам журналов.
- Проблемы с правами доступа: у пользователя
systemd-journaldили группыsystemd-journalмогут отсутствовать права на запись в директорию журналов. - Устаревшая версия systemd: в старых версиях systemd могут присутствовать баги, исправленные в обновлениях.
Способы решения
Способ 1: Проверка и освобождение дискового пространства
Убедитесь, что на диске достаточно места для записи журналов. Выполните:
df -h
Обратите внимание на раздел, содержащий /var/log или /var/log/journal. Если свободное место меньше 100 МБ, освободите его, удалив временные файлы или старые логи других приложений. Например:
sudo rm -rf /tmp/*
sudo apt clean # Для Ubuntu/Debian
Способ 2: Очистка старых журналов journald
Если дискового пространства недостаточно, очистите старые записи journald с помощью утилиты journalctl. Для удаления записей старше 3 дней:
sudo journalctl --vacuum-time=3d
Чтобы ограничить общий размер журналов 200 МБ:
sudo journalctl --vacuum-size=200M
Внимание: Полная очистка всех журналов (sudo rm -rf /var/log/journal/*) может привести к потере важных логов. Используйте только в крайних случаях.
Способ 3: Перезапуск службы systemd-journald
Иногда служба временно зависает, и простой перезапуск помогает. Выполните:
sudo systemctl restart systemd-journald
Затем проверьте статус:
systemctl status systemd-journald
Убедитесь, что служба активна (active (running)) и нет ошибок в выводе. Если служба не запускается, проверьте логи через dmesg или journalctl -u systemd-journald (если ещё работает).
Способ 4: Проверка и исправление конфигурации
Некорректные настройки в конфигурационном файле могут вызывать ошибки. Откройте файл:
sudo nano /etc/systemd/journald.conf
Убедитесь, что параметры раскомментированы (без #) и имеют адекватные значения. Например:
Storage=persistent
SystemMaxUse=500M
SystemKeepFree=15%
Storage=persistent сохраняет журналы на диск, SystemMaxUse ограничивает общий размер, SystemKeepFree оставляет свободное место на разделе. После изменений перезапустите службу (см. Способ 3).
Способ 5: Обновление systemd
Если используется устаревшая версия systemd, обновите её до последней стабильной. Для Ubuntu/Debian:
sudo apt update
sudo apt install --only-upgrade systemd
Для Fedora/CentOS/RHEL:
sudo dnf upgrade systemd
После обновления перезагрузите систему:
sudo reboot
Обновление часто содержит исправления для известных багов journald.
Профилактика
Чтобы избежать повторения ошибок journald:
- Регулярно мониторьте дисковое пространство на разделе
/var/logс помощьюdf -hили настроенных алертов (например, в Zabbix). - Задайте разумные лимиты в
/etc/systemd/journald.conf:SystemMaxUse=500M,SystemMaxFileSize=50M,SystemKeepFree=10%. - Настройте автоматическую очистку через cron: добавьте задание
0 2 * * * /usr/bin/journalctl --vacuum-time=7dдля ежедневной очистки записей старше 7 дней. - Избегайте конфликтов с другими службами логирования. Если rsyslog не нужен, отключите его:
sudo systemctl disable --now rsyslog. - Следите за обновлениями systemd и устанавливайте их своевременно, особенно для LTS-дистрибутивов.
- Проверяйте права доступа на директорию
/var/log/journal:ls -ld /var/log/journal— владелец должен бытьroot:systemd-journalс правами2755.