Erlang 同步';在启动时初始化ejabberd节点

Erlang 同步';在启动时初始化ejabberd节点,erlang,ejabberd,mnesia,Erlang,Ejabberd,Mnesia,我遇到了一个似乎无法解决的问题。 我需要传入函数mnesia:change_table_copy_type(schema,node(),disc_copies)。在命令行中,从主节点创建数据库时。 erl的开始是:erl-name NODE1-mnesia extra\u db\u nodes\“['MASTER']\”-s mnesia 当我启动shell然后进入函数调用时,一切正常,然后我可以停止shell并正常启动ejabber进程。所以我需要一个脚本化的方法来完成DB设置和同步 我尝试了

我遇到了一个似乎无法解决的问题。 我需要传入函数mnesia:change_table_copy_type(schema,node(),disc_copies)。在命令行中,从主节点创建数据库时。 erl的开始是:erl-name NODE1-mnesia extra\u db\u nodes\“['MASTER']\”-s mnesia 当我启动shell然后进入函数调用时,一切正常,然后我可以停止shell并正常启动ejabber进程。所以我需要一个脚本化的方法来完成DB设置和同步

我尝试了许多不同的方法来传递change\u table\u copy\u类型,但没有成功。最终目标是能够编写启动mnesia的过程脚本,传入函数,然后退出shell。 有人试过这个吗?我尝试过重定向,例如: erl-name NODE1-mnesia额外\u数据库\u节点\“['MASTER']\”-s mnesia< 这会失败,因为传入函数调用时节点未启动。 我尝试过使用“-run”选项,但get和error告诉我函数未定义。
可能我没有正确构造-run部分。

请尝试erl的
-eval
参数:

erl -name NODE1 -mnesia extra_db_nodes "['MASTER']" -eval 'mnesia:start(), mnesia:change_table_copy_type(schema, node(), disc_copies), init:stop()'

这可能需要一个
mnesia:wait_for_tables
,以确保在执行
change_table\u copy\u type

之前有时间加入集群。自ejabberd 15.05以来,ejabberd提供了一个新命令来简化集群部署和设置:
ejabberdctl join_cluster

该命令记录在ejabberd文档中:

这将帮助您确保集群使用启动ejabberd的标准方式进行了正确配置