2016-07-11 41 views
0

我的守护进程通过TCP和UDP发送和接收数据。逻辑连接通常是一组这样的流。报告守护进程状态的UNIX/Linux惯用方式

我打算创建一个网页来报告这些连接的类型以及传输了多少数据。不能通过调用netstat来实现,因为很难确定哪个连接是哪个连接,特别是使用可以更改端口的UDP。所以守护进程应该积累统计数据。

我不想把web服务器放在守护进程中。不想将统计数据不断写入文件中。

这个好主意在/proc内核文件系统中使用,其中读取来自该文件系统的文件调用应用程序中的函数。它按需运作。会很高兴有这样的事情。

有一些现有的UNIX/Linux守护程序有这样的要求的任何例子吗?他们在做什么?

回答

0

我相信/proc文件通常只定义为读取和设置内核参数,而不是守护进程的参数。

Docker uses a unix socket (usually on /var/run/docker.sock),它接受HTTP请求并实现REST API。这对你的报告应用程序很方便,但显然是守护进程的开销。

您还可以为守护程序创建一个命名管道,例如,在您定期或根据需要将/var/run/myd.info作为文本发送您的信息。

已经有一个implementation of a named pipe writer不会在SIGPIPE(当另一端已经停止读取管道,即当您发送EOF时)发生中断。

+0

我正在调查DBus。价值? – Velkan

+0

是的,那是另一种选择。它比“只是一个管道”更复杂,更像套接字API。 –

0

您可以创建自己的/ proc文件并向其写入数据。 这是一种常见的方式,我记得SCST,它允许您使用自己的/ proc /分支来读取甚至控制守护进程资源。

到这里看看:http://www.crashcourse.ca/introduction-linux-kernel-programming/lesson-11-adding-proc-files-your-modules-part-1

但是,你需要创建一个内核模块与你的守护进程使用此功能。

也许SQLite数据库和你的守护进程上的一些简单的API是一个选项吗?