创建一个实际上是网络端口的文件

创建一个实际上是网络端口的文件

我有一个程序在集群上运行,该程序的输出被写入我指定的日志文件中。但是,我不想将其写入文件,而是想将其写入网络端口,以便可以使用 Node.js 等读取它。

例如,我希望能够按照 /dev/127.0.0.1:3000 的行指定一个文件

目前,我正在使用 Node.js 来监视日志文件,当数据发生变化时重新读取所有数据,将新数据与旧数据进行比较以查看添加的内容,然后进行处理。但这是相当低效的。

答案1

如果您的程序在不重新创建文件(通过打开它)的情况下进行日志记录,您应该能够通过将文件创建为管道来完成此操作:

mkfifo potato.log

您可以向管道发送消息,就像写入文件一样:

$ # This is the logging process:
$ echo "Warning!" > potato.log

并阅读它们:

$ # This is the listener process:
$ cat potato.log
Warning!

如果您确实想将其转发到 TCP 套接字,您可以执行以下操作:

$ socat PIPE:potato.log TCP:localhost:3000

它可能不是很健壮,但您应该能够通过编写程序而不是 socat(处理来自远程 TCP 的断开连接)来执行更健壮的操作。

(如果您可以修改程序以获得对基于套接字的日志记录的本机支持,则所有这些都是不必要的)。

相关内容