Linux systemdСредняя

Ошибки journalctl: причины и способы решения

Статья объясняет типичные ошибки утилиты journalctl, их причины и методы устранения. Вы научитесь восстанавливать доступ к системным логам и настраивать journald.

Обновлено 16 февраля 2026 г.
10-15 мин
Средняя
FixPedia Team
Применимо к:Ubuntu 20.04+Debian 10+CentOS 8+systemd 237+

Что означают ошибки journalctl

journalctl — это утилита для просмотра журналов systemd, которая собирает сообщения от ядра, служб и пользовательских приложений. Ошибки при её использовании обычно связаны с проблемами доступа, конфигурации или состоянием самой службы systemd-journald. Типичные симптомы:

  • Failed to open journal: Permission denied — недостаточно прав.
  • No journal files were found — служба неактивна или журнал отключен.
  • Journal file /var/log/journal/... is corrupted — повреждение данных.
  • Failed to seek in journal file — проблемы с чтением из-за переполнения или ошибок диска.

Эти ошибки мешают диагностике системы, поэтому их важно устранять promptly.

Причины возникновения

  1. Служба systemd-journald не запущена или отключена
    Если демон journald не работает, journalctl не может получить доступ к логам. Это может произойти после ручной остановки или сбоя.
  2. Недостаточные права доступа
    По умолчанию обычные пользователи могут читать только свои логи. Для доступа к общесистемным журналам требуются права root или членство в группе systemd-journal.
  3. Журнал переполнен или повреждён
    При достижении лимита размера (управляется SystemMaxUse и RuntimeMaxUse) journald может начать удалять старые записи, что иногда приводит к corruption. Также возможны повреждения из-за сбоев диска или некорректного завершения работы.
  4. Неправильные параметры команды
    Использование несуществующих фильтров (например, неверных имён юнитов) или устаревших опций может вызвать ошибки вывода.
  5. Конфликт с другими системами логирования
    Если параллельно активен rsyslog или syslog-ng с настроенным захватом логов, journald может работать в режиме volatile (только в RAM), и логи не сохраняются на диск.
  6. Отсутствие директории для хранения
    Если в конфигурации указано Storage=persistent, но каталог /var/log/journal отсутствует или имеет неверные права, journald не сможет записывать логи.

Способы решения

Способ 1: Проверка и перезапуск службы systemd-journald

Первым делом убедитесь, что демон journald активен.

  1. Проверьте статус:
    systemctl status systemd-journald
    
    Если служба неактивна (inactive), запустите её:
    sudo systemctl enable --now systemd-journald
    
  2. Если служба работает, но ошибки сохраняются, попробуйте перезапустить:
    sudo systemctl restart systemd-journald
    
  3. Проверьте, не зафиксированы ли ошибки в логах самой службы (если journald частично работает):
    sudo journalctl -u systemd-journald --no-pager
    

💡 Совет: На некоторых дистрибутивах (например, Alpine Linux) systemd-journald может быть заменён на busybox или отсутствовать. Убедитесь, что ваш дистрибутив использует systemd.

Способ 2: Использование sudo и управление группами

Если ошибка связана с правами:

  1. Запускайте journalctl с sudo для доступа к системным логам:
    sudo journalctl -xe
    
  2. Для постоянного решения добавьте пользователя в группу systemd-journal:
    sudo usermod -aG systemd-journal $USER
    
    После этого нужно выйти и заново войти в систему (или выполнить newgrp systemd-journal).

⚠️ Важно: Группа systemd-journal может не существовать на старых версиях systemd (< 230). В этом случае используйте только sudo.

Способ 3: Очистка и восстановление журнала

При переполнении или повреждении:

  1. Очистка старых записей (сначала попробуйте безопасные методы):
    # Удалить логи старше 7 дней
    sudo journalctl --vacuum-time=7d
    # Или ограничить общий размер журнала 200 МБ
    sudo journalctl --vacuum-size=200M
    

    Эти команды работают даже при частичном повреждении, так как обращаются к метаданным.
  2. Принудительное удаление всего журнала (если повреждён критически):
    sudo systemctl stop systemd-journald
    sudo rm -rf /var/log/journal/*
    sudo rm -rf /run/log/journal/*
    sudo systemctl start systemd-journald
    

    После этого journald начнёт создавать новые файлы. Логи за период остановки будут потеряны.
  3. Проверка целостности (если journalctl запускается, но выводит ошибки):
    sudo journalctl --verify
    

    Если обнаружены ошибки, попробуйте очистить проблемные файлы вручную (см. шаг 2).

Способ 4: Проверка и правка конфигурации

Ошибки могут возникать из-за настроек в /etc/systemd/journald.conf.

  1. Откройте файл конфигурации:
    sudo nano /etc/systemd/journald.conf
    
  2. Убедитесь, что ключевые параметры установлены корректно:
    [Journal]
    Storage=persistent  # или volatile, если нужны только RAM-логи
    SystemMaxUse=500M   # лимит размера на диске
    RuntimeMaxUse=100M  # лимит в RAM
    MaxRetentionSec=1month  # время хранения
    
    • Storage=persistent — сохранять логи на диск в /var/log/journal.
    • Storage=volatile — хранить только в RAM (/run/log/journal), логи исчезают после перезагрузки.
    • Storage=none — отключить логирование (редкий случай).
  3. После изменений перезапустите службу:
    sudo systemctl restart systemd-journald
    

Способ 5: Альтернативные методы просмотра логов

Если journalctl временно недоступен, используйте другие источники:

  • Классические логи syslog:
    sudo tail -f /var/log/syslog  # Debian/Ubuntu
    sudo tail -f /var/log/messages  # RHEL/CentOS
    
  • Ядерные сообщения:
    sudo dmesg -T | tail -50
    
  • Логи конкретного юнита через systemd:
    sudo systemctl status <service_name>  # показывает последние логи службы
    

Эти методы не заменяют journalctl полностью, но позволяют получить критичную информацию при аварии journald.

Профилактика

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

  1. Регулярно мониторьте размер журнала
    Добавьте в crontab еженедельную проверку:
    0 2 * * 0 /usr/bin/journalctl --disk-usage
    

    При достижении 80% лимита выполняйте очистку.
  2. Настройте адекватные лимиты в journald.conf
    Избегайте SystemMaxUse=infinity — это может привести к заполнению диска. Для серверов рекомендую 500M–1G, для рабочих станций — 200M–500M.
  3. Включите сжатие логов
    Добавьте в конфиг:
    Compress=yes
    

    Это уменьшит потребление дискового пространства.
  4. Резервное копирование важных логов
    Если нужны долгосрочные архивы, настройте пересылку через systemd-journal-remote или скрипты, экспортирующие логи в /var/log/archive/.
  5. Обновляйте systemd
    Многие баги journald исправляются в обновлениях. Для Ubuntu/Debian:
    sudo apt update && sudo apt upgrade systemd
    

    Для RHEL/CentOS:
    sudo yum update systemd
    
  6. Избегайте параллельных систем логирования
    Если используете rsyslog, настройте его в режиме imjournal для чтения из journald, а не дублирования записи. Это снимет нагрузку и предотвратит конфликты.

Следуя этим рекомендациям, вы обеспечите стабильную работу journalctl и сможете быстро диагностировать проблемы в будущем.

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

Почему journalctl не показывает логи после перезагрузки?
Как исправить ошибку 'Failed to open journal: Permission denied'?
Что делать, если journalctl выводит 'No journal files were found'?
Можно ли увеличить размер журнала journalctl?

Полезное

Проверьте статус службы systemd-journald
Используйте sudo для доступа к журналам
Очистите старые логи при переполнении
Проверьте конфигурацию journald
Используйте альтернативные источники логов