我們有一個Linux應用程序,由幾個模塊組成。每個模塊可以有一些全局配置變量(一些整數,字符串等)。該應用程序旨在作爲守護程序運行很長時間。適用於Linux的C應用程序的運行時配置
什麼是在運行時重新配置應用程序的最好方法?理想情況下,我們想改變這些配置變量的內容。通過/proc
,inotify
?什麼是最酷,先進的方式?
我們有一個Linux應用程序,由幾個模塊組成。每個模塊可以有一些全局配置變量(一些整數,字符串等)。該應用程序旨在作爲守護程序運行很長時間。適用於Linux的C應用程序的運行時配置
什麼是在運行時重新配置應用程序的最好方法?理想情況下,我們想改變這些配置變量的內容。通過/proc
,inotify
?什麼是最酷,先進的方式?
發送一個像SIGHUP
這樣的信號,您的程序可以捕獲信號處理程序並執行所需的任何操作,例如重新讀取其配置文件,這是實現此目標的一種歷史悠久的方式。我不能說這是一種「最酷的先進」方式,而是一種實用而簡單的方式。例如,當你希望Apache的httpd
守護進程重新讀取httpd.conf
時會發生什麼 - 它發生在service httpd reload
的引擎之下。
如何傳遞這些值?通常通過配置文件?/proc是隻有內核的fs嗎? – Cartesius00
示例:軟件重新加載指定信號上的配置文件。 – Basilevs
@詹姆斯,是的,我的意思是程序應該重新讀取它的配置文件。我會更新答案,以便現在明確。 –
上次我做了類似的事情,我只需每隔X分鐘檢查一次配置文件的修改時間戳,並且如果更改了重新讀取文件。今天,我可能會在任何平臺上使用inotify
或類似的本地API,儘管它有更多的工作。
即使是系統管理員,在重新配置服務器(通常人們不直接在生產計算機上執行此操作)後重新啓動服務器通常更簡單。或者至少讓服務器通過一個信號重新加載它的配置文件(就像SIGHUP經常使用的那樣)。
如果通過配置文件不滿足您的需求(但通常這是一個好方法),您可以考慮擁有更多的交互式界面,通過網絡瀏覽器,實現這一目標。如果你真的想這樣做,你可能會在你的應用程序中嵌入一個小型Web服務器,或者給它提供FastCGI或SCGI能力。
「最酷,先進的方式」是將模塊公開爲D-Bus對象(位於「系統」總線上),設置爲D-Bus屬性。
如何使用/ proc完成此任務? – Basilevs