Как правильно запустить ejabberdctl из bash-скрипта?

#bash #ubuntu #ejabberd

#bash #ubuntu #ejabberd

Вопрос:

Мне нужно зарегистрировать много тысяч пользователей в ejabberd из файла csv. Для этого я написал простой скрипт.

 #!/bin/sh
OLDIFS=$IFS
IFS=','
[ ! -f $INPUT ] amp;amp; { 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
Если я просто выполню строку, скопированную из выходных данных, все в порядке. Пользователь создается нормально.

Ответ №1:

Это всего лишь небольшая хитрость на потом: как только вы заработаете в своем цикле, если вы считаете, что 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: {}
 

Затем выполните это в командной строке, чтобы зарегистрировать учетную запись:

 curl 'localhost:5280/api/register?user=user2amp;host=localhostamp;password=somepass123'