我希望有多个客户端从 /dev/log(rsyslog 和自定义工具)读取数据,据我所知,这是一个 unix 域套接字。
如何实现这一点?
答案1
理论上,您可以打开一个进程,该进程打开套接字,然后分叉,每个客户端都可以从套接字读取数据。但最终结果可能不是您想要的。由于每次读取都会从套接字缓冲区中删除数据,因此只有一个进程会获取数据,即根据调度,有时是第一个子进程,有时是第二个子进程。
但我猜你想让所有读者都获得所有数据。在这种情况下,你需要某种复制器,即一个从套接字读取数据并将这些数据复制到所有连接到此复制器进程(使用套接字或其他方式)的读者的进程。
syslog/rsyslog 可以是这样的复制器,因此您需要将自定义读取器附加到那里。
答案2
我不确定您是否可以这样做(因为我不相信它是一个可查找的文件,而是一个字节流),但您可以让 rsyslog 写入多个文件,包括让它写入例如命名管道,您的自定义工具可以从中读取。这可能是最简单的解决方案。