동시 컬은 호스트를 확인할 수 없습니다.

동시 컬은 호스트를 확인할 수 없습니다.

동시 컬 실행을 시도했지만 "호스트를 확인할 수 없습니다"라고 쉽게 보고됩니다. 컬을 병렬로 실행하려면 "병렬"을 사용합니다.

parallel :::: ./a.sh ./a.sh
from api server
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    16    0    16    0     0  13781      0 --:--:-- --:--:-- --:--:-- 16000
from api server
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    16    0    16    0     0  14925      0 --:--:-- --:--:-- --:--:-- 16000
from api server
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    16    0    16    0     0  15009      0 --:--:-- --:--:-- --:--:-- 16000
from api server
from api server
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    16    0    16    0     0  14324      0 --:--:-- --:--:-- --:--:-- 16000
curl: (6) Could not resolve host: curl
100    16    0    16    0     0  44198      0 --:--:-- --:--:-- --:--:-- 44198

금연 건강 증진 협회

#!/bin/bash

curl http://127.0.0.1:81/a.php

a.php

<?php

echo "from some server\n";

4개의 동시 컬만으로 호스트가 실패하는 문제를 해결하는 방법은 무엇입니까? 내가 겪은 원래 문제가 다음에 설명되어 있기 때문에 이것을 시뮬레이션하고 있습니다.동시 요청을 할 때 phpcurl localhost가 느려집니다. 동시 컬이 4개만 있기 때문에 이것이 열린 파일 제한 문제라고 생각하지 않습니다. 왜 이런 일이 발생하는지 설명할 수 있는 사람이 있나요? 참고로 운영체제는 우분투 16.04 입니다.


Rudy Meier는 병렬성을 사용하는 올바른 방법을 제안했습니다. 사용 후에는 yes | head -n4 | parallel ./a.sh문제가 더 이상 존재하지 않습니다. 그래도 내 원래 문제는 남아 있습니다.

답변1

--dryrunGNU Parallel이 실행 중인 것이 무엇인지 혼란스러우면 다음을 사용해 보세요.

$ parallel --dryrun :::: ./a.sh ./a.sh
#!/bin/bash #!/bin/bash
#!/bin/bash 
#!/bin/bash curl http://127.0.0.1:81/a.php
 #!/bin/bash
 curl http://127.0.0.1:81/a.php
curl http://127.0.0.1:81/a.php #!/bin/bash
curl http://127.0.0.1:81/a.php 
curl http://127.0.0.1:81/a.php curl http://127.0.0.1:81/a.php

이것은 분명히 당신이 원하는 것이 아닙니다. 그래서 무슨 일이 일어났나요?

출력을 분석하면 첫 번째 파일의 모든 줄이 두 번째 파일의 모든 줄과 결합되는 것을 볼 수 있습니다. 더 명확하게:

file-b:
1
2
3

$ parallel --dryrun :::: b b
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3

실수는 GNU를 병렬화하는 것 입니다 ::::.::::읽다파일의 내용이 매개변수로 사용됩니다. 2개의 파일을 제공했으므로 해당 파일의 교차곱이 생성됩니다.

당신이 원하는 것은 ::::

$ parallel --dryrun ::: ./a.sh ./a.sh
./a.sh
./a.sh

답변2

사용법 parallel이 잘못되었습니다.

어떻게든 네 번째 실행이 실행됩니다.

curl http://127.0.0.1:81/a.php curl http://127.0.0.1:81/a.php

구문을 완전히 이해하지는 못하지만 다음과 같이 작동합니다.

yes | head -n4 | parallel ./a.sh

매뉴얼 페이지 설명

작업은 단일 명령일 수도 있고 입력의 각 줄에 대해 실행되어야 하는 작은 스크립트일 수도 있습니다.

관련 정보