You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级ejabberd至19.09.1后mod_lhcping模块启动失败求助

解决ejabberd 19.09.1升级后mod_lhcping启动失败的问题

别担心,这个问题其实是ejabberd版本升级后API变动导致的自定义模块兼容性问题,我来帮你一步步解决。

首先看你的错误日志,核心问题是**gen_mod:get_opt/4函数在ejabberd 19.09.1中已经不存在了**,而你使用的mod_lhcping模块还是基于ejabberd 18.04的旧API编写的,所以启动时触发了未定义函数的崩溃。

问题根源

ejabberd从18.x升级到19.x时,对核心模块gen_mod的API做了调整:旧版本的gen_mod:get_opt/4(四参数调用)被移除或重构,新版本改用gen_mod:get_option/3或者直接使用Erlang原生的maps:get/3来读取配置参数(因为ejabberd 19.x的配置已经转为map结构)。

具体修复步骤

  1. 定位并修改模块代码
    打开mod_lhcping.erl文件,找到日志里提到的第120行,原来的代码大概是这样的:

    gen_mod:get_opt(send_pings, Opts, #Fun<mod_lhcping.0.4469384>, false)
    

    把它替换成以下两种方式之一:

    • 方式一(直接用map操作,更简洁):
      maps:get(send_pings, Opts, false)
      
    • 方式二(使用ejabberd新版标准API):
      gen_mod:get_option(send_pings, Opts, false)
      

    注意:如果你的模块里还有其他gen_mod:get_opt的调用,都需要做同样的替换。

  2. 重新编译模块
    在命令行中用Erlang编译器重新编译修改后的模块:

    erlc mod_lhcping.erl
    
  3. 替换模块并重启ejabberd

    • 把编译好的mod_lhcping.beam文件替换到ejabberd的模块目录中(通常是/usr/lib/ejabberd/ebin/或者你自定义的模块路径)
    • 重启ejabberd服务:
      systemctl restart ejabberd
      

额外提示

如果后续还有其他模块启动失败的问题,大概率也是类似的API变动导致的,你可以对照ejabberd 19.x的官方文档,检查旧模块中使用的API是否已经被调整。

内容的提问来源于stack exchange,提问作者AnimeshKashyap

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:06:39