首页 > 解决方案 > 如何从 bash 脚本正确启动 ejabberdctl?

问题描述

我需要从 csv 文件在 ejabberd 中注册成千上万的用户。为此,我编写了一个简单的脚本。

#!/bin/sh
OLDIFS=$IFS
IFS=','
[ ! -f $INPUT ] && { echo "$INPUT file not found"; exit 99; }
while read username domain pass p1 p2 p3 p4
do
    echo "ejabberdctl register $username $domain $pass"
    ejabberdctl register $username $domain $pass
done < users.csv
IFS=$OLDIFS

但最后,答案是: 错误:cannot_register 如果我只是运行从输出复制的行,一切正常。用户是正常创建的。

标签: bashubuntuejabberd

解决方案


这只是稍后的一个小技巧:一旦你的循环工作,如果你认为ejabberdctl太慢,你可以尝试使用 ReST API。执行许多请求时,这应该快得多。

临时配置类似这样的东西(记得在完成后删除它):

listen:
  -
    port: 5280
    module: ejabberd_http
    tls: false 
    request_handlers:
      /api: mod_http_api

api_permissions:
  "console commands":
    from:
      - ejabberd_ctl
      - mod_http_api
    who: all
    what: "*"

modules:
  mod_http_api: {}

然后在 shell 中执行这个来注册一个帐户:

curl 'localhost:5280/api/register?user=user2&host=localhost&password=somepass123'

推荐阅读