用戶,管理員和技術支持人員需要從C.運行信息
開發了我的情況下,這些信息,例如一個守護進程運行時的細節和監測信息
- 當前系統運行狀況,如吞吐量(MB /秒),已經寫入的數據,...
- 當前配置
我會在Java世界中使用JMX和procfs的(或sysfs)接口的內核模塊。日誌文件似乎不是最好的方法。
C守護程序的這種信息接口的最佳方式是什麼?
我想過打開套接字並實現一個裸機http或xmlrpc服務器,但這似乎是矯枉過正。什麼是替代品?
用戶,管理員和技術支持人員需要從C.運行信息
開發了我的情況下,這些信息,例如一個守護進程運行時的細節和監測信息
我會在Java世界中使用JMX和procfs的(或sysfs)接口的內核模塊。日誌文件似乎不是最好的方法。
C守護程序的這種信息接口的最佳方式是什麼?
我想過打開套接字並實現一個裸機http或xmlrpc服務器,但這似乎是矯枉過正。什麼是替代品?
您可以在UNIX域套接字上偵聽,並且定期寫入連接到它的任何人的當前狀態(例如每秒一次)。您不需要實現像HTTP或XMLRPC這樣的協議 - 因爲通信將是單向的,只需定期編寫一行包含狀態的純文本。
如果您仍在使用關係數據庫,請創建另一個表並根據需要填寫當前狀態。如果您沒有關係數據庫,請將該狀態寫入文件中,然後實施一些循環方案,以避免覆蓋當前有人閱讀的文件。
使用RDBMS進行日誌記錄不是一個好主意 - 如何記錄「數據庫連接失敗」?日誌應該使用最簡單,最不可能的失敗機制。 – 2009-08-14 16:01:11
我並不打算將它用於日誌記錄,也沒有要求日誌記錄。相反,他想查詢當前狀態(不是歷史狀態)。我完全同意錯誤報告應該使用一個非常簡單的機制 - 但我相信這不是問題。 – 2009-08-14 16:18:47
好的,我也相信RDBMS是實時共享進程間信息的不好解決方案。讓你的GUI(或其他)查詢數據庫的狀態變化是一個糟糕的解決方案,恕我直言。 – 2009-08-14 16:46:27
寫入文件。使用文件鎖定協議強制原子讀取和寫入。你同意的任何事情都可以工作。可能會有一個UUCP鎖定庫浮在你可以使用的位置。在以前的生活中,我發現了一個Linux版本。我也從頭開始實施它。這樣做也相當微不足道。
查看Linux上的lockdev(3)庫。它適用於設備,但它也可用於普通文件。
您通常不需要對日誌進行任何鎖定。 – 2009-08-14 16:08:45
我並不是建議OP使用日誌文件。我正在考慮一個包含上述數據快照的小文件。該文件的大小是固定的,所有數據都在已知位置。因此,更新它需要某種形式的鎖定以防止無效讀取。 – 2009-08-14 17:30:25
你可以在你的守護進程中使用一個信號處理程序來對USR1做出反應,並將信息轉儲到屏幕/日誌/網絡。這樣,只要您需要信息,您就可以發送過程USR1信號。
+1。 SIGINFO是一個不錯的選擇。 – outis 2009-08-15 02:40:46
我最喜歡socket的想法。沒有必要支持HTTP或任何RPC協議。您可以創建一個簡單的特定於應用程序的協議來返回請求的信息如果服務器總是返回相同的信息,那麼處理傳入的請求是微不足道的,但如果您想要擴展可能的查詢,那麼簡單的方法可能會導致問題。使用預先存在的協議的主要原因是利用現有的庫和工具。
說到槓桿作用,另一種選擇是使用SNMP並將守護程序作爲託管組件訪問。如果您需要遠程查詢/管理守護程序,則此選項有其優勢,但否則可能會比HTTP服務器更有效。
日誌文件通常是最好的一階解決方案。 – 2009-08-14 14:27:07
共享內存怎麼樣? – philant 2009-08-14 15:52:53