Что означает ошибка syslog службы
Ошибка syslog службы в Linux указывает на то, что демон системного логирования (обычно rsyslog или syslog-ng) не может запуститься или аварийно завершает работу. Это критическая проблема, так как без работающего syslog система перестаёт записывать важные события в файлы логов (/var/log/syslog, /var/log/messages и др.), что затрудняет диагностику других сбоев.
Типичные симптомы:
- Команда
systemctl status rsyslogпоказывает статусfailedилиinactive. - В выводе
journalctl -u rsyslogвидны ошибки запуска. - Файлы логов в
/var/log/не обновляются. - При попытке запуска вручную (
sudo systemctl start rsyslog) служба сразу останавливается.
Причины возникновения
Ошибка может быть вызвана несколькими распространёнными проблемами:
- Повреждённая или некорректная конфигурация — синтаксическая ошибка в
/etc/rsyslog.confили файлах в/etc/rsyslog.d/после ручного редактирования или обновления пакета. - Конфликт портов — другой процесс уже слушает UDP/TCP порт 514 (стандартный порт syslog), что мешает запуску демона.
- Недостаточно дискового пространства — раздел, на котором находится
/var/log, заполнен на 100%. - Неправильные права доступа — у службы нет прав на запись в каталог
/var/logили на чтение конфигурационных файлов. - Проблемы с SELinux/AppArmor — политики безопасности блокируют доступ демона к нужным файлам или сокетам.
- Устаревшая или повреждённая версия пакета — после частичного обновления пакет
rsyslogможет быть несовместим с текущей конфигурацией.
Способы решения
Способ 1: Проверка статуса и перезапуск службы
Начните с диагностики текущего состояния службы.
- Проверьте статус службы:
systemctl status rsyslog
Обратите внимание на строкуActive:и последние строки лога (если есть ошибки). - Просмотрите логи самой службы через journald:
journalctl -u rsyslog --no-pager -n 50
Это покажет последние 50 строк логов, где могут быть clues. - Если служба остановлена или в ошибке, попробуйте перезапустить:
sudo systemctl restart rsyslog - Проверьте статус снова. Если служба запустилась, проверьте, идут ли логи:
tail -f /var/log/syslog
(или/var/log/messagesна CentOS/RHEL).
Способ 2: Проверка и исправление конфигурации
Синтаксическая ошибка в конфигурационном файле — частая причина сбоя.
- Проверьте синтаксис основного конфига без запуска службы:
sudo rsyslogd -N1
Если вывод содержитrsyslogd: error, значит, есть ошибка. Команда покажет номер строки и описание. - Проверьте конфиги в
/etc/rsyslog.d/:sudo rsyslogd -N1 -f /etc/rsyslog.d/your-config.conf
Заменитеyour-config.confна имя подозрительного файла. - Если нашли ошибку, отредактируйте файл (
sudo nano /etc/rsyslog.confили черезvim). Частые проблемы:- Неправильный синтаксис директив (например, пропущен пробел после селектора).
- Использование устаревших модулей.
- Некорректные пути к файлам логов.
- После исправления снова проверьте синтаксис и перезапустите службу:
sudo rsyslogd -N1 && sudo systemctl restart rsyslog
Способ 3: Проверка дискового пространства и прав доступа
- Проверьте свободное место на разделе с
/var/log:df -h /var/log
Если использование близко к 100%, очистите старые логи (например, сжатые файлы*.gzв/var/log/) или увеличьте раздел. - Проверьте права на каталог
/var/log:ls -ld /var/log
Владельцем должен бытьroot, права —drwxr-xr-x(0755). Если права другие, исправьте:sudo chown root:root /var/log sudo chmod 755 /var/log - Проверьте права на конкретные файлы логов, если они уже существуют:
ls -l /var/log/syslog*
Владельцем обычноrootилиsyslog(в зависимости от дистрибутива). При необходимости:sudo chown syslog:adm /var/log/syslog # для Ubuntu/Debian sudo chown root:root /var/log/messages # для CentOS/RHEL
Способ 4: Разрешение конфликта портов
По умолчанию rsyslog слушает порт 514 (UDP и TCP). Если другой процесс уже его использует, служба не запустится.
- Найдите процесс, слушающий порт 514:
sudo netstat -tulpn | grep :514
Или сss:sudo ss -tulpn | grep :514 - Если порт занят, определите, можно ли остановить конфликтующий процесс (например, старый экземпляр syslog или кастомный сервис). Или измените порт rsyslog:
- Отредактируйте
/etc/rsyslog.confи закомментируйте строки, содержащие*.* @или*.* @@(для UDP/TCP удалённого логирования), если они не нужны. - Или измените порт в модуле
imudp/imtcp:module(load="imudp" port="5140") module(load="imtcp" port="5140") - Перезагрузите конфиг:
sudo systemctl restart rsyslog.
- Отредактируйте
Способ 5: Обновление или переустановка пакета rsyslog
Если проблема появилась после обновления системы, возможно, пакет повреждён или есть баг.
- Для Ubuntu/Debian:
sudo apt update sudo apt install --reinstall rsyslog - Для CentOS/RHEL/Fedora:
sudo yum reinstall rsyslog
или на Fedora с dnf:sudo dnf reinstall rsyslog - После переустановки проверьте конфигурацию (Способ 2) и перезапустите службу.
Способ 6: Временное отключение SELinux/AppArmor (для диагностики)
Если у вас включён SELinux (CentOS/RHEL/Fedora) или AppArmor (Ubuntu/Debian), они могут блокировать rsyslog.
- Для SELinux проверьте логи:
sudo ausearch -m avc -ts recent
Если есть записи, связанные с rsyslog, это probable cause.
Временно переведите SELinux в permissive mode (не рекомендуется для продакшена):sudo setenforce 0 sudo systemctl restart rsyslog
Если служба запустилась, нужно настроить политики SELinux. Верните enforcing:sudo setenforce 1. - Для AppArmor проверьте статус профиля:
sudo apparmor_status | grep rsyslog
Если профиль в режиме enforce, попробуйте перевести в complain:sudo aa-complain /etc/apparmor.d/usr.sbin.rsyslogd sudo systemctl restart rsyslog
Профилактика
Чтобы избежать повторного сбоя syslog службы:
- Регулярно обновляйте систему — новые версии rsyslog содержат исправления критических уязвимостей и багов.
- Не редактируйте конфигурационные файлы без резервной копии — перед изменением создайте копию:
sudo cp /etc/rsyslog.conf /etc/rsyslog.conf.bak. - Мониторьте свободное место на диске — настройте уведомления о заполнении раздела
/varвыше 80%. - Тестируйте конфигурацию перед перезапуском — всегда используйте
rsyslogd -N1после правок. - Избегайте ручной установки пакетов из ненадёжных источников — используйте только официальные репозитории дистрибутива.