最近,我在办公室里大声向所有人询问:“为什么不将这些日志重定向到 /dev/null 而不是 /dev/lognull?”有人告诉我,这其中有(或曾经有)原因,但没人记得。有人告诉我,原因在 syslog-ng 文档的某个地方,但到目前为止我还没能找到它。有人知道原因吗?
答案1
我刚刚收到老板发来的电子邮件:
出色地,我们将其命名为 lognull,但这只是我们的选择。我再次找到了原因。Syslog-ng 想要更改它用于记录的文件的权限,包括 /dev/null。系统中的许多其他东西(包括未以 root 身份运行的东西)都依赖于 /dev/null 的可读和可写性。这就是为什么你应该使用单独的设备文件:
odin ~ # ls -ld /dev/null crw------- 1 root root 1, 3 9月 30 15:48 /dev/null
也许最简单的方法是让 syslog-ng 的 init 脚本创建类似 /dev/lognull 的东西,这样它就始终可用于系统。我认为问题在于,由于现在设备的动态特性,它在重启后会消失。当我们在旧版本的 Linux 或 Solaris 上运行所有这些时,情况并非如此。这有意义吗?
我还发现了这个帖子在 syslog-ng 列表中关于这个问题。到目前为止,我已经遵循了关于空目的地的建议。
答案2
我从未听说过 /dev/lognull。
这将返回什么?
ls -l /dev/null /dev/lognull
我认为 syslog-ng 可能正在创建该设备节点,但是,这看起来很奇怪。
我必须承认,如果 /dev/lognull 是一个大型常规文件,我会发现它非常有趣。:)
答案3
只需定义一个有源但没有目标的日志语句: https://www.syslog-ng.com/technical-documents/doc/syslog-ng-open-source-edition/3.21/administration-guide/55#TOPIC-1180579
要跳过消息处理而不将其发送到目的地,请使用适当的过滤器创建日志语句,但不要在语句中包含任何目的地,并使用最终标志。