2016-07-11 75 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是一個選項嗎?