/var/log/syslog 为空。服务 rsyslog 正在运行,但尚未安装

/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,这破坏了我的正常 syslog 服务。但我的系统上没有安装 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

然后它就会起作用。几个星期……

我该怎么做才能永久解决这个问题?

答案1

我定期遇到 /var/log/syslog 为空的问题。

检查“/etc/syslog/syslog.conf”中的 syslog 配置文件,并相应地指定日志目的地。

我发现有一个名为 rsyslog 的服务破坏了我的正常 syslog 服务。但我的系统上没有安装 rsyslog,所以我不知道发生了什么,也不知道如何永久删除 rsyslog。

rsyslog 是系统中默认的日志服务器,您可以在“/etc/rsyslog.conf”中找到它的配置文件。不要试图删除它,只需通过执行“systemctl disable rsyslog”禁用 rsyslog 守护进程,这样下次启动时它就不会自动重新启动。

答案2

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 将该路径链接到操作系统的默认 syslog。

在您的情况下,系统使用 rsyslog 来提供 syslog 实现。

那么你应该有一个 syslog.service,它实际上是指向 rsyslog.service 的指针。或者,换句话说,您可能应该考虑保留 rsyslog 启用状态 ( sudo systemctl enable rsyslog.service),除非您有特定原因想要使用其他 syslog 实现。如果您这样做,那么您只需要将该 syslog 的服务文件链接到 syslog.service。

或者,您可以为您首选的系统日志创建一个插件,其中包含:

[Install]
Alias=syslog.service

https://coreos.com/os/docs/latest/using-systemd-drop-in-units.html(例如)了解有关 drop-ins 的更多信息。

答案3

在我的情况下,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。无法找到错误报告。

相关内容