o curl simultâneo não conseguiu resolver o host

2

Eu tento executar o enrolamento de co-corrente, mas ele pode informar facilmente "Não foi possível resolver o host". Para executar o curl paralelo, eu uso "paralelo".

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

a.sh

#!/bin/bash

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

a.php

<?php

echo "from some server\n";

Como o host pode ser resolvido por apenas 4 curls simultâneos? Eu simulo isso porque o problema original que encontro é descrito em php curl localhost é lento ao fazer solicitações simultâneas . Eu realmente não acho que é um problema de limite de arquivo aberto, já que há apenas 4 curvas simultâneas. Alguém pode explicar por que isso ocorre? By the way, o sistema operacional é Ubuntu 16,04.

Bem, a maneira correta de usar o paralelo é sugerida pelo rudimeier. Depois de usar yes | head -n4 | parallel ./a.sh , o problema não existe mais. Ainda assim, minha edição original está lá.

    
por cwhsu 21.09.2016 / 18:23

2 respostas

1

Você deve tentar usar --dryrun quando estiver confuso com o que o GNU Parallel executa:

$ 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

Isso claramente não é o que você pretendia. Então, o que está acontecendo?

Se você analisar a saída, verá que cada linha do primeiro arquivo é combinada com cada linha do segundo arquivo. É ainda mais óbvio com:

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

O erro está em :::: . :::: faz o GNU Parallel ler o conteúdo do arquivo como argumentos. E desde que você deu 2 arquivos, ele faz o produto cruzado deles.

O que você queria era ::: :

$ parallel --dryrun ::: ./a.sh ./a.sh
./a.sh
./a.sh
    
por 24.02.2018 / 11:36
2

Seu parallel de uso está errado.

De alguma forma, a quarta corrida será executada

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

Eu não entendo completamente a sintaxe, mas isso funcionaria:

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

Explicação da página man

A job can be a single command or a small script that has to be run for each of the lines in the input.

    
por 21.09.2016 / 18:53