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

#!/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 Если я просто запустил строку, скопированную из вывода, все в порядке. Пользователь создается нормально.

0
AlexeyKa 24 Фев 2021 в 17:58

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=user2&host=localhost&password=somepass123'
1
Badlop 24 Фев 2021 в 17:17