LINUX.ORG.RU

плагинная архитектура, перечитать конфигурацию подключенного в рантайме плагина

 ,


2

4

приветы. В плагинной архитектуре, когда ядро подгружает различные so файлы (плагины), - как можно в рантайме заставить ядро перечитать конфиг конкретного одного плагина?

Сейчас ядро ждет SIGHUP и по нему перегружает все модули, что не совсем корректно. Вариант использовать под каждый плагин свой какой то сигнал выглядит топорно и вряд ли так делается.

Нужно сделать что то вроде CLI терминала к ядру? или заложить управляющие команды через argv?

Есть ли еще красивые и принятые в проде решения?

P.S. в итоге выбор пал на сокеты unix - так как гораздо проще потом поддерживать + масштабировать при появлении новых команд управления.



Последнее исправление: elmir_k (всего исправлений: 1)

Прога только под линукс? Если да, можно написать маленькую утилиту для посылки сигналов с помощью sigqueue():

int sigqueue(pid_t pid, int sig, const union sigval value);

Через этот вызов вместе с сигналом можно передать контекст (размером sizeof(int)). Например ID плагина, который надо перегрузить. В обработчике сигнала проверяешь это поле, ну и дальше ты понял.

DELIRIUM ☆☆☆☆☆
()

В связке systemd--systemctl используется dbus. Dbus это вобщем-то тоже unix-сокет, но с готовой инфраструктурой.

iliyap ★★★★★
()
Ответ на: комментарий от DELIRIUM

sigqueue - крутяк. в голове крутилось. только надо как то и где регистрировать какому сигналоу (или пэйлоаду) какой процесс назначен.

elmir_k
() автор топика
Ответ на: комментарий от DELIRIUM

Как видишь, не слишком. К тому же, сигналы асинхронны. И race-prone. И без обратной связи.

kirk_johnson ★☆
()
Ответ на: комментарий от elmir_k

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

Но я бы поискал что-то POSIX-овое или с возможностью легко портировать под вендец. Ну так, на всякий случай.

deep-purple ★★★★★
()
Последнее исправление: deep-purple (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.