Назад | Перейти на главную страницу

/ var / log / syslog пуст. Служба rsyslog запущена, но не установлена

Проблема

Периодически сталкиваюсь с проблемой, что / var / log / syslog пуст.

$ ls /var/log/syslog
-rw-r----- 1 root adm 0 Dez 31 06:29 /var/log/syslog

Окружение и установленные пакеты

Я использую Debian Jessie.

Aptitude показывает, что я установил пакет inetutils-syslogd, а пакет rsyslog не установлен.

Анализ

Я попытался найти проблему, используя следующие команды:

$ service syslog start
Job for syslog.socket failed. See 'systemctl status syslog.socket' and 'journalctl -xn' for details.
Failed to start syslog.service: Unit syslog.service failed to load: No such file or directory.

$ systemctl status syslog.socket
* syslog.socket - Syslog Socket
   Loaded: loaded (/lib/systemd/system/syslog.socket; static)
   Active: inactive (dead)
     Docs: man:systemd.special(7)
           http://www.freedesktop.org/wiki/Software/systemd/syslog
   Listen: /run/systemd/journal/syslog (Datagram)

Mär 07 12:18:02 viathinksoft.de systemd[1]: Socket service syslog.service not loaded, refusing.
Mär 07 12:18:02 viathinksoft.de systemd[1]: Failed to listen on Syslog Socket.

$ systemctl status syslog.service
* syslog.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)

Временное решение

Я узнал, что есть служба под названием rsyslog, что нарушает мою обычную службу системного журнала. Но rsyslog не установлен в моей системе, поэтому я понятия не имею, что происходит и как я могу удалить rsyslog навсегда.

$ systemctl status rsyslog.service
* rsyslog.service - LSB: enhanced syslogd
   Loaded: loaded (/etc/init.d/rsyslog)
   Active: active (exited) since Di 2016-02-09 02:42:03 CET; 3 weeks 6 days ago

$ aptitude remove rsyslog
Es werden keine Pakete installiert, aktualisiert oder entfernt.
0 Pakete aktualisiert, 0 zusätzlich installiert, 0 werden entfernt und 0 nicht aktualisiert.
0 B an Archiven müssen heruntergeladen werden. Nach dem Entpacken werden 0 B zusätzlich belegt sein.

В качестве временного решения я запускаю следующие команды:

$ service rsyslog stop
$ dpkg-reconfigure inetutils-syslogd

Тогда все заработает. На несколько недель ...

Что я могу сделать, чтобы навсегда решить проблему?

Периодически сталкиваюсь с проблемой, что / var / log / syslog пуст.

Проверьте файл конфигурации системного журнала в "/etc/syslog/syslog.conf" и укажите соответствующие места назначения журнала.

Я обнаружил, что существует служба под названием rsyslog, которая нарушает работу моей> нормальной службы syslog. Но rsyslog не установлен в моей системе, поэтому я понятия не имею, что происходит, и как я могу удалить rsyslog навсегда.

rsyslog - это сервер журнала по умолчанию, присутствующий в вашей системе, и вы можете найти его файл конфигурации в "/etc/rsyslog.conf". Не пытайтесь удалить его, просто отключите демон rsyslog, выполнив команду «systemctl disable rsyslog», чтобы при следующей загрузке он не перезапустился автоматически.

В моем случае с сервером Ubuntu 16.04.3 LTS Я решил с

sudo chown syslog:adm /var/log/syslog

rsyslog был запущен и работал:

$ sudo systemctl status rsyslog.service                                                                                                                                                                                                                                               
* rsyslog.service - System Logging Service
   Loaded: loaded (/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2018-06-30 03:52:25 -03; 2 days ago
     Docs: man:rsyslogd(8)
           http://www.rsyslog.com/doc/
 Main PID: 90 (rsyslogd)

Причина, похоже, связана с владельцем файла, должно быть syslog вместо того root. Не удалось найти отчет об ошибке.

Подробная информация о syslog.socket (https://cgit.freedesktop.org/systemd/systemd/plain/units/syslog.socket) предложите некоторые объяснения того, что происходит:

[Unit]
Description=Syslog Socket
Documentation=man:systemd.special(7)
Documentation=http://www.freedesktop.org/wiki/Software/systemd/syslog
DefaultDependencies=no
Before=sockets.target shutdown.target

# Don't allow logging until the very end
Conflicts=shutdown.target

[Socket]
ListenDatagram=/run/systemd/journal/syslog
SocketMode=0666
PassCredentials=yes
PassSecurity=yes
ReceiveBuffer=8M

# The default syslog implementation should make syslog.service a
# symlink to itself, so that this socket activates the right actual
# syslog service.
#
# Examples:
#
# /etc/systemd/system/syslog.service -> /lib/systemd/system/rsyslog.service
# /etc/systemd/system/syslog.service -> /lib/systemd/system/syslog-ng.service
#
# Best way to achieve that is by adding this to your unit file
# (i.e. to rsyslog.service or syslog-ng.service):
#
# [Install]
# Alias=syslog.service
#
# See http://www.freedesktop.org/wiki/Software/systemd/syslog for details.

Некоторое обсуждение этого доступно на https://www.freedesktop.org/wiki/Software/systemd/syslog/.

Модуль syslog.socket - это общий модуль, который (по сути) просто обеспечивает наличие сокета для journald, который может разговаривать с демоном syslog, когда это необходимо.

Говоря более практическим языком, journald использует / run / systemd / journal / syslog для подключения к syslog (любая реализация syslog), а syslog.socket связывает этот путь с любым системным журналом ОС по умолчанию.

В вашем случае система использует rsyslog для реализации системного журнала.

Так что вы должен есть syslog.service, который на самом деле является указателем на rsyslog.service. Или, другими словами, вам, вероятно, следует подумать о том, чтобы оставить rsyslog включенным (sudo systemctl enable rsyslog.service), если у вас нет особой причины использовать другую реализацию системного журнала. Если да, то вам просто нужно связать служебный файл системного журнала с syslog.service.

Или вы можете создать drop-in для предпочитаемого системного журнала, который содержит:

[Install]
Alias=syslog.service

Видеть https://coreos.com/os/docs/latest/using-systemd-drop-in-units.html (например) для получения дополнительной информации о дроп-инах.