Как запускать команды curl параллельно, используя GNU параллельно - PullRequest
0 голосов
/ 28 июня 2018

Совсем недавно начал программировать на bash. Я хочу запустить команду curl 'n' раз, где n - пользовательский ввод. И я хочу работать параллельно. Я наткнулся на GNU Parallel. код скручивания для запуска n раз:

ip1="some ip"
ip2="some ip"
ip3="some ip"
for ((j=1; j<= $servers;))
do
    for ((i= 1; i<= $val; i++))
    do
        c=ip$j
        value=scatest"$j$i"
        curl -s -X POST ${!c}:4000/invoke -H "content-type: application/json" -d '{"args":["org1","'$value'","27-06-2018"]}'
        if ((i % $val == 0))
        then
            ((j++))
        fi
    done
done

Я хочу запускать эту команду curl одинаково и параллельно на разных хостах в зависимости от ввода пользователя. Кто-нибудь может мне помочь?

Заранее спасибо

1 Ответ

0 голосов
/ 29 июня 2018

Распараллелить на сервер довольно просто:

val=1000
doit() {
    server="$1"
    serverno="$2"
    for ((i= 1; i<= $val; i++))
    do
        value=scatest"$serverno$i"
        curl -s -X POST ${server}:4000/invoke -H "content-type: application/json" -d '{"args":["org1","'$value'","27-06-2018"]}'
    done
}
export -f doit
export val
parallel -j0 doit {} {#} ::: serverip1 serverip2 ...

Если вы можете принять scatest имеет другое значение, вы можете распараллелить еще больше:

doit() {
    server="$1"
    jobno="$2"
    i="$3"
    value=scatest"$jobno$i"
    curl -s -X POST ${server}:4000/invoke -H "content-type: application/json" -d '{"args":["org1","'$value'","27-06-2018"]}'
}
export -f doit
seq $val | parallel -j0 doit {1} {#} {2} ::: serverip1 serverip2 ... :::: -
...