bash에서 curl 요청을 병렬로 실행


23

bash 스크립트에서 5 개의 curl요청 을 실행하는 가장 좋은 방법은 무엇입니까 parallel? 성능상의 이유로 직렬로 실행할 수 없습니다.


1
솔루션의 일부를 검색해 보셨습니까? 또 다른 SF 질문은 정확하게 당신이 요구하는 것 같습니다 : serverfault.com/questions/248143/…
Theuni

답변:


34

명령 뒤에 '&'를 사용하여 프로세스를 백그라운드로 지정하고 'wait'를 사용하여 프로세스를 완료하십시오. 서브 쉘을 작성해야하는 경우 명령 주위에 '()'를 사용하십시오.

#!/bin/bash

curl -s -o foo http://example.com/file1 && echo "done1" &
curl -s -o bar http://example.com/file2 && echo "done2" & 
curl -s -o baz http://example.com/file3 && echo "done3" &

wait

첫 단계에는 간단하지만 효과적입니다. 호스트 이름이나 반복 횟수와 같이 변경해야 할 경우 신속하게 해킹됩니다. 감사.
Chris


6

나는 이와 같은 작업을 위해 병렬 병렬 을 사용 합니다.


4
curl과 통화 할 수있는 예를 제공해 주 gnu parallel시겠습니까?
m13r

예, 병렬은 매우 좋으며 동일한 요청을 100 번 보내는 것이 쉽습니다. 그러나 100 가지 컬 요청을 보내는 것과 병렬을 사용하는 방법에 대한 예는이 답변을 더 좋게 만듭니다.
рüффп


0

curl예를 들면 다음 과 xargs같습니다.

$ cat URLS.txt | xargs -P 10 -n 1 curl

위의 예는 curl각 URL을 한 번에 10 개씩 병렬로 작성 해야 합니다. 는 -n 1그 때문에 거기 xargs에만 1 개 라인 사용 URLS.txt에 따라 파일 curl실행.

각 xargs 매개 변수의 기능 :

$ man xargs

-P maxprocs
             Parallel mode: run at most maxprocs invocations of utility at once.
-n number
             Set the maximum number of arguments taken from standard input for 
             each invocation of utility.  An invocation of utility will use less 
             than number standard input arguments if the number of bytes 
             accumulated (see the -s option) exceeds the specified size or there 
             are fewer than number arguments remaining for the last invocation of 
             utility.  The current default value for number is 5000.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.