Linux的C应用程序的运行时配置

时间:2011-11-01 09:02:43

标签: c linux gcc

我们有一个Linux的C应用程序,包含很少的模块。每个模块都可以有一些全局配置变量(一些整数,字符串等)。该应用程序旨在作为守护程序运行很长时间。

在运行时重新配置应用程序的最佳方法是什么?理想情况下,我们希望以某种方式更改这些配置变量的内容。通过/procinotify?什么是最酷,最先进的方式?

4 个答案:

答案 0 :(得分:8)

发送一个类似SIGHUP的信号,你的程序捕获信号处理程序,并做任何需要做的事情,比如重新读取它的配置文件,这是一种历史悠久的方法。我不能称之为“最酷的高级”方式,而是一种实用而简单的方式。例如,当您希望Apache的httpd守护程序重新读取httpd.conf时会发生什么 - 它发生在service httpd reload的引擎下。

答案 1 :(得分:0)

上次我做了类似的事情,我每隔X分钟检查配置文件的修改时间戳,如果更改则重新读取文件。今天我可能会在我所使用的任何平台上使用inotify或类似的原生API,即使这是更多的工作。

答案 2 :(得分:0)

即使对于系统管理员来说,重新配置服务器后通常也会更简单(通常,人们不会直接在生产计算机上执行此操作)。或者至少让服务器通过信号重新加载其配置文件(如SIGHUP经常用于)。

如果通过配置文件不能满足您的需求(但通常是一种很好的方法),您可以考虑使用更具交互性的界面,例如:通过网络浏览器,实现这一目标。如果你真的想这样做,你可以在你的应用程序中嵌入一个小的Web服务器,或者给它FastCGI或SCGI能力。

答案 3 :(得分:0)

“最酷,最先进的方法”是将模块公开为D-Bus对象(在“系统”总线上),设置为D-Bus属性。