如何从 bash 脚本正确启动 ejabberdctl?
How start ejabberdctl from bash script properly?
我需要通过 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
如果我只是 运行 从输出中复制的行,一切正常。用户正常创建。
这只是以后的一个小技巧:一旦你的循环开始工作,如果你认为 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'
我需要通过 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 如果我只是 运行 从输出中复制的行,一切正常。用户正常创建。
这只是以后的一个小技巧:一旦你的循环开始工作,如果你认为 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'