bash - 如何从 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 如果我只是运行从输出复制的行,一切正常。用户是正常创建的。
解决方案
这只是稍后的一个小技巧:一旦你的循环工作,如果你认为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'
推荐阅读
- android - 如何在 Fedora 上将 gradle 从 4.4.1 升级到最新版本?
- javascript - useEffect 使 onChange 和输入延迟/缓慢
- java - Java文件的单独构建步骤 - Maven
- python - 使用 Django Q 对象通过返回多个结果的中间模型进行查询
- android - Travis CI 环境变量“;” 预期的
- javascript - 如何检查 React-Native 中的水平或垂直图像状态?
- ibm-cloud - 这个量子循环代表什么?请描述这个电路发生了什么
- algorithm - 递归函数的时间复杂度是多少?
- c++ - CMake:防止在子目录库项目中构建测试可执行目标
- c - 如何在不按 ENTER 的情况下读取 C 中的数据?