【问题标题】:Sync'ing ejabberd nodes at startup在启动时同步 ejabberd 节点
【发布时间】:2023-03-28 13:35:02
【问题描述】:

我遇到了一个似乎无法解决的问题。 我需要传入函数 mnesia:change_table_copy_type(schema, node(), disc_copies)。在从主节点创建数据库的命令行中。 erl 开始是: 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”选项,但 get 和错误告诉我该函数是 undef。 也许我没有正确构建 -run 部分。

【问题讨论】:

    标签: erlang ejabberd mnesia


    【解决方案1】:

    从 ejabberd 15.05 开始,ejabberd 提供了一个新命令来简化集群部署和设置:ejabberdctl join_cluster

    该命令记录在 ejabberd 文档中:ejabberd clustering

    这应该可以帮助您确保使用启动 ejabberd 的标准方式正确配置了集群。

    【讨论】:

      【解决方案2】:

      尝试 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之前有时间加入集群。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-24
        • 2015-10-10
        • 2018-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-18
        • 2017-06-14
        相关资源
        最近更新 更多