如何在 systemd+rsyslog 主机中恢复`/dev/log`?

Oth*_*eus 11 systemd-journald rsyslogd

在 RHEL7 上,systemd-journald接管了许多曾经由rsyslogd. 无论是由于 bug 还是这两个守护进程之间的冲突,有时/dev/log都会丢失。因此,依赖syslog(3)调用的程序将无法正常运行,例如,包括logger. 如何恢复/dev/log插座?

Oth*_*eus 16

问和回答我自己的问题,因为谷歌在这个问题上不是很有帮助。

通常,使用rsyslogdimuxsock模块将/dev/log自己创建套接字,在创建之前取消链接前一个条目。当rsyslogd停止时(可能是因为配置错误导致重启失败),rsyslogd 删除 /dev/log.

但是,提供的 rsyslogRHEL7预计将与 一起使用systemd,并且该imuxsock模块将实际打开和删除/run/systemd/journal/syslog套接字。同时,该/dev/log设备由systemd-journald.socket触发的系统服务文件创建journald

显然,无论是否$imjournal使用模块,以下都是有效的。

总之,如果/dev/log消失:

  1. 重启 systemd-journald.socket:

    systemctl restart systemd-journald.socket
    
    Run Code Online (Sandbox Code Playgroud)
  2. 然后重新启动 rsyslogd

    systemctl start rsyslogd
    
    Run Code Online (Sandbox Code Playgroud)

更新:restart rsyslogd如果rsyslogd已经在运行,我相信可能会重新删除套接字。

  • 非常感谢!我只是花了几个小时来追踪为什么日志记录对服务不起作用。我终于找到了丢失的 /dev/log,这让我找到了您的解决方案。 (2认同)

小智 5

systemctl restart systemd-journald.socket && systemctl restart rsyslog解决方案在 Ubuntu 16.04 上对我不起作用。

相反,我必须重新创建/dev/log以下符号链接/run/systemd/journal/dev-log

ln -s /run/systemd/journal/dev-log /dev/log
Run Code Online (Sandbox Code Playgroud)