Настройка во время выполнения приложения на C для Linux - PullRequest
3 голосов
/ 01 ноября 2011

У нас есть приложение на C для Linux, состоящее из нескольких модулей.Каждый модуль может иметь несколько глобальных переменных конфигурации (некоторые целые числа, строки и т. Д.).Приложение предназначено для работы в качестве демона в течение длительного времени.

Какой самый лучший способ перенастроить приложение во время выполнения?В идеале мы хотели бы как-то изменить содержимое этих config-переменных.Через /proc, inotify?Какой самый крутой, продвинутый способ?

Ответы [ 4 ]

8 голосов
/ 01 ноября 2011

Отправка сигнала типа SIGHUP, который ваша программа перехватывает с помощью обработчика сигнала и делает все, что нужно, например, перечитывает файл конфигурации, - это проверенный временем способ сделать это. Я не могу назвать это «самым крутым» способом, скорее практичным и простым способом. Это, например, то, что происходит, когда вы хотите, чтобы демон Apache httpd перечитал httpd.conf - это происходит под капотом service httpd reload.

0 голосов
/ 01 ноября 2011

«Самый крутой, продвинутый способ» - выставить модули как объекты D-Bus (на «системной» шине) с настройками в качестве свойств D-Bus.

0 голосов
/ 01 ноября 2011

Обычно даже системным администраторам проще перезапустить сервер после его перенастройки (и обычно люди не делают этого непосредственно на рабочей машине).Или, по крайней мере, чтобы сервер перезагрузил свои файлы конфигурации через сигнал (например, часто используется SIGHUP).

Если переход через файлы конфигурации не подходит для ваших нужд (но обычно это хороший подход)Вы можете рассмотреть возможность использования более интерактивного интерфейса, например, через веб-браузер, для этой цели.Если вы действительно хотите пойти по этому пути, вы можете встроить крошечный веб-сервер в свое приложение или предоставить ему возможности FastCGI или SCGI.

0 голосов
/ 01 ноября 2011

В прошлый раз, когда я делал что-то подобное, я просто проверял метку времени изменения файла конфигурации каждые X минут, и, если он был изменен, перечитайте файл.Сегодня я, вероятно, использовал бы inotify или аналогичный нативный API на любой платформе, на которой я работал, хотя это и более трудоемкий процесс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...