用于报告守护程序状态的UNIX / Linux惯用方法

时间:2016-07-11 07:06:52

标签: linux unix logging

我的守护进程通过TCP和UDP发送和接收数据。逻辑连接通常是一组这样的流。

我将创建一个网页来报告这些连接的类型以及已传输的数据量。不能通过调用netstat来做到这一点,因为很难确定哪个连接是哪个,尤其是UDP可以更改端口。因此,守护进程应该累积统计信息。

我不想将Web服务器放在守护进程中。不想将统计信息不断写入文件。

好主意用于/proc内核文件系统,其中对该文件系统中的文件的读取调用应用程序中的函数。它按需工作。有这样的东西会很高兴。

是否有任何具有此类要求的现有UNIX / Linux守护程序的示例?他们做了什么?

2 个答案:

答案 0 :(得分:0)

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

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

您还可以为守护程序创建命名管道,例如在/var/run/myd.info中,您定期或按要求将您的信息作为文字发送。

SIGPIPE已经有一个implementation of a named pipe writer没有中断(当另一端停止读取管道时,即发送EOF时的信号)。

答案 1 :(得分:0)

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

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

但是您需要使用您的守护程序创建一个内核模块才能使用此功能。

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