我遇到了一个似乎无法解决的问题。 我需要传递函数mnesia:change_table_copy_type(schema,node(),disc_copies)。在命令行中,从主节点创建db。 erl start是:erl -name NODE1 -mnesia extra_db_nodes \“['MASTER'] \”-s mnesia 当我启动shell然后输入函数调用一切正常,然后我可以停止shell并正常启动ejabber进程。所以我需要一个脚本化的方法来完成数据库设置和同步。
我尝试了很多不同的方法来传递change_table_copy_type但没有成功。最终目标是能够编写启动mnesia的过程,传入函数,然后退出shell。 还有人试过这个吗?我尝试过重定向,例如: erl -name NODE1 -mnesia extra_db_nodes \“['MASTER'] \” - s mnesia<
由于在传入函数调用时未启动节点,因此失败。 我已经尝试使用“-run”选项但得到并且错误告诉我函数是undef。 也许我没有正确构建-run部分。
答案 0 :(得分:1)
为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_copy_type
之前有时间加入群集。
答案 1 :(得分:0)
自ejabberd 15.05开始,ejabberd附带了一个新命令来简化群集部署和设置:ejabberdctl join_cluster
该命令记录在ejabberd文档中:ejabberd clustering。
这可以帮助您确保使用标准方式正确配置群集以启动ejabberd。