Проблема
Периодически сталкиваюсь с проблемой, что / 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 (например) для получения дополнительной информации о дроп-инах.