Подключение новых виртуальных хостов без перезагруски сервера

Добрый день, ALL.

Скажите есть ли какая нибудь возможность подключения новых виртуальных хостов к серверу без перезагрузки оного ?

Нашел в Contributions некий Additional commands for ejabberdctl

Там есть функция load config from file. Вопрос - это поможет мне решить проблему ? (Попробывал бы сам, но тестовой площадки нет, а играться с боевым сервером нет желания. И так без премии сижу 2й месяц :) )

Простой ответ: это не возможно

Простой ответ: это не возможно.

"Load config from file" не поможет при этой проблемы. Для каждого хоста надо сделать инициализацию, а "load config from file" это не делает.

Несколько месяцев назад я написал маленкий скрипт для того, а я его никогда не попробовал. Это был бы интересный эксперимент, а кажется, что вам эксперимента не хочется :)

legoscia,

legoscia, спасибо!
Готов таки пойти на эксперемент. Думаю рука не дрогнет оставить на Новый Год без премии :)

Отпиши пожалуйста поподробней как запустить твой скритп. Беглым взглядом выявил что это не bash скрипт :) А к сожалению мои познания в Erlang стремятся к нулю.

Если кому нибудь будет интересно:

Если кому нибудь интересно:
Благодаря legoscia и документации по ErLang я все таки нашел решение данной проблемы. Если кому-нибудь в дальнейшем надо будет решить такую же проблему - вот исходник модуля:

vhost.erl:

-module(vhost).
-include("ejabberd.hrl").
-export([change_virtual_hosts/0]).

change_virtual_hosts() ->
    OldHosts = ?MYHOSTS,
    ejabberd_config:start(),
    NewHosts = ?MYHOSTS,
    AddedHosts = NewHosts -- OldHosts,
    RemovedHosts = OldHosts -- NewHosts,

    %% I might have forgotten some...
    ejabberd_sm:start_link(),
    ejabberd_local:start_link(),
    ejabberd_auth:start(),

    lists:foreach(
      fun(Host) ->
	      case ejabberd_config:get_local_option({modules, Host}) of
		  undefined ->
		      ok;
		  Modules ->
		      lists:foreach(
			fun({Module, _Args}) ->
				gen_mod:stop_module(Host, Module)
			end, Modules)
	      end
      end, RemovedHosts),
    lists:foreach(
      fun(Host) ->
	      case ejabberd_config:get_local_option({modules, Host}) of
		  undefined ->
		      ok;
		  Modules ->
		      lists:foreach(
			fun({Module, Args}) ->
				gen_mod:start_module(Host, Module, Args)
			end, Modules)
	      end
      end, AddedHosts).

Компиляем его в консоли Erlang

erl> с(vhost).

Полученный vhost.beam кидаем в директорию, где лежат все .beam файлы Ejabber'a

Вносим изменения в ejabberd.cfg и опять же в консоли erlang'a пишем:

1>vhost:change_virtual_hosts().

Опробовано на версии ejabberd1.1.2

Syndicate content