通过管道将 BIND9 日志传输到 shell.php 脚本

通过管道将 BIND9 日志传输到 shell.php 脚本

我正在尝试从 BIND9 的查询日志中提取一些数据。我喜欢先将查询传送到脚本,然后对其进行解析,然后记录它。

我该怎么做?请帮忙。

日志记录 { 通道 simple_log { 文件 "/var/log/named/log.sh" 版本 10 大小 10m; <--- 可能吗? 打印时间 是; 打印严重性 是; 打印类别 是; }; 类别默认 { simple_log; }; 类别查询 { simple_log; }; };

答案1

您需要使用 fifo。这是一个“特殊”文件,实际上是一个套接字;当进程打开此特殊文件并对其进行读/写时,连接的其他进程将获得这些读/写的结果。

例如,BIND9 会配置为记录到 fifo,然后您的 PHP 脚本也会打开 fifo,并从中读取数据。每次 BIND9 执行写入操作时,PHP 都会返回读取操作。

参见man mkfifo,但实质上:

mkfifo /var/log/named/log.fifo

让 BIND9 记录到该日志中(删除版本和大小参数,它们无法与 fifo 配合使用),然后 PHP 读取和解析它由您决定,但请记住,您像打开任何普通文件一样打开和读取它。读取将阻塞,直到有内容写入其中。

作为测试,您可以执行以下操作:

在 1 号航站楼:

mkfifo /tmp/test_fifo
cat /tmp/test_fifo

cat由于尚无任何内容可读取,因此将阻塞。这是在模拟 PHP 从读取test_fifo

目前在 2 号航站楼:

echo foo >/tmp/test_fifo

观察终端 1 如何返回您的“foo”。这是在模拟 BIND9 写入某些内容。

当您完成 fifo 后,rm它就像任何其他普通文件一样。

相关内容