2011-11-01 37 views
3

我們有一個Linux應用程序,由幾個模塊組成。每個模塊可以有一些全局配置變量(一些整數,字符串等)。該應用程序旨在作爲守護程序運行很長時間。適用於Linux的C應用程序的運行時配置

什麼是在運行時重新配置應用程序的最好方法?理想情況下,我們想改變這些配置變量的內容。通過/procinotify?什麼是最酷,先進的方式?

+0

如何使用/ proc完成此任務? – Basilevs

回答

8

發送一個像SIGHUP這樣的信號,您的程序可以捕獲信號處理程序並執行所需的任何操作,例如重新讀取其配置文件,這是實現此目標的一種歷史悠久的方式。我不能說這是一種「最酷的先進」方式,而是一種實用而簡單的方式。例如,當你希望Apache的httpd守護進程重新讀取httpd.conf時會發生什麼 - 它發生在service httpd reload的引擎之下。

+0

如何傳遞這些值?通常通過配置文件?/proc是隻有內核的fs嗎? – Cartesius00

+0

示例:軟件重新加載指定信號上的配置文件。 – Basilevs

+0

@詹姆斯,是的,我的意思是程序應該重新讀取它的配置文件。我會更新答案,以便現在明確。 –

0

上次我做了類似的事情,我只需每隔X分鐘檢查一次配置文件的修改時間戳,並且如果更改了重新讀取文件。今天,我可能會在任何平臺上使用inotify或類似的本地API,儘管它有更多的工作。

0

即使是系統管理員,在重新配置服務器(通常人們不直接在生產計算機上執行此操作)後重新啓動服務器通常更簡單。或者至少讓服務器通過一個信號重新加載它的配置文件(就像SIGHUP經常使用的那樣)。

如果通過配置文件不滿足您的需求(但通常這是一個好方法),您可以考慮擁有更多的交互式界面,通過網絡瀏覽器,實現這一目標。如果你真的想這樣做,你可能會在你的應用程序中嵌入一個小型Web服務器,或者給它提供FastCGI或SCGI能力。

0

「最酷,先進的方式」是將模塊公開爲D-Bus對象(位於「系統」總線上),設置爲D-Bus屬性。

相關問題