Bash отправляет несколько запросов curl, используя GNU параллельно - PullRequest
0 голосов
/ 04 июня 2018

У меня есть список URL-адресов (более 5000), и мне нужно отправить 25 URL-адресов параллельно внутренней службе.Я знаю, как отправить запрос URL, используя один запрос.

curl -s http://192.168.150.113:9999/app.boxx.com 

И я попробовал использовать GNU parallel,

while true;do parallel -j25 curl -s http://192.168.150.101:9999/'{}' < list;done

Хорошо ли использовать GNU parllel?Это работает хорошо, но я чувствую, что ответ довольно медленный, и ответ похож на один запрос API.

Вместо этого, можем ли мы использовать амперсанд (&) в конце каждого URL-адреса и отправлять запрос параллельно?

Ответы [ 2 ]

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

Ответ Inians совершенно действителен и предпочтителен, если вам нужно сделать что-то более сложное.Но если вы только собираетесь сделать один curl, вы можете сделать:

parallel -j25 curl -s http://192.168.150.101:9999/{} < list
0 голосов
/ 04 июня 2018

Я не уверен, что вы используете весь потенциал GNU параллельно в той степени, в которой это должно быть использовано.Чтобы это работало, вам нужно определить задание меньшего размера (наименьшее количество единиц, которое вы можете разбить) и позволить ему запускаться столько раз, сколько вы хотите.

Определение функции для чтения из URLПредполагая, что часть http://192.168.150.113:9999/ является фиксированной строкой, а остальная часть URL-адреса поступает из файла, определите функцию как

oneShot() {
    url="http://192.168.150.113:9999/"
    finalURL="$url$1"
    curl -s "$finalURL"   
}

и экспортируйте эту функцию, чтобы сделать ее доступной для дочерних оболочек

export -f oneShot

и теперь делайте все возможное, чтобы достичь параллелизма, чтобы параллельно запустить 25 заданий

parallel -j25 oneShot < list
...