Как использовать xargs -P 20 с curl и списком хостов - PullRequest
0 голосов
/ 19 января 2020

Еще один вопрос nube. У меня есть скрипт, который проверяет хосты из списка один за другим для ответа http. Как обновить его до мультитрехдискового с помощью xargs или другого метода?

#!/bin/bash
response="200"
cat list.txt | while read string
do
test=$(curl -I --path-as-is -s -k "http://"$string"/index.html" | head -n1)
if grep -q "response" <<< "$test"; then
echo $string " has response " $response
fi
done

1 Ответ

0 голосов
/ 19 января 2020

Ниже приведен фрагмент кода (обратите внимание на точное response_code сравнение с 200):

code=200
xargs -P20 -I@ sh -c "test \$(curl -I -s -w "%{response_code}" http://@/index.html -o/dev/null) -eq $code && echo @ has code $code" < list.txt

Если вы предпочитаете использовать для него grepping, то выполните:

code=200
xargs -P20 -I@ sh -c "curl -I -s http://@/index.html | head -1 | grep -qw $code && echo @ has code $code" < list.txt

Затем немного более оптимизированный, позволяющий указать оба параллелизма (-P20), а также позволяющий каждому вызову curl обрабатывать более чем 1 URL (-n4, меньше разветвления):

code=200
xargs -n4 -P20 -I@ curl -I -s -w "%{response_code}: @\n" http://@/index.html -o/dev/null | egrep "^$code:" < list.txt
...