我在运行 systemd 和 syslog-ng (3.5.6-2.1) 的 Ubuntu 16.04.4 机器上遇到了问题,其中一个进程 (我们称之为 X) 记录到 syslog 的消息未被 syslog-ng 接收。深入研究后发现,journald 劫持了 X 记录的消息,因此这些消息从未到达 syslog-ng。
经过一番搜索,似乎需要让 systemd 知道 syslog-ng 正在提供 syslog 服务,这样 journald 收到的消息也会发送到 syslog-ng。然而,查看 syslog-ng 的 systemd 单元后发现,情况应该已经如此,因为它包含:
[Install]
WantedBy=multi-user.target
Alias=syslog.service
但即使 syslog-ng 已明确启用systemctl enable syslog-ng
,但符号链接似乎
/etc/systemd/system/syslog.service -> /lib/systemd/system/syslog-ng.service
系统上缺少该符号链接。卸载并重新安装 syslog-ng,然后运行,systemctl enable syslog-ng
确实重新创建了该符号链接,从而使其正常工作。
现在的实际问题是,我有一台启用了 syslog-ng systemd 单元的机器,但缺少符号链接,在这种情况下systemctl enable syslog-ng
,不是重新创建丢失的符号链接,因为 systemd 似乎看到 syslog-ng 已启用,因此不必检查符号链接是否存在。
当然,理论上我可以手动创建符号链接,但我的问题是:
- 如果 systemd 在启用 syslog-ng 单元时必须创建符号链接,那么为什么会缺少符号链接?
- 让 systemd 重新创建此符号链接的正确方法是什么,没有必须禁用 syslog-ng 然后重新启用它?
我查看了能找到的 systemd 文档,但令人沮丧的是,它对于何时/如何/在什么情况下创建这些符号链接的说明却很模糊。
任何帮助将非常感激!
答案1
syslog-ng 3.5 相当旧,而且有些 bug,我建议升级到较新的版本(目前最新版本是 3.16)。您可以在开发人员的 repo 中找到软件包:https://build.opensuse.org/project/show/home:laszlo_budai:syslog-ng