2017-01-18 6 views
1

est ici un simple script bash pour le code d'état HTTPlecture multiple à partir d'un fichier txt dans bash (traitement parallèle)

while read url 
    do 
     urlstatus=$(curl -o /dev/null --silent --head --write-out '%{http_code}' "${url}" --max-time 5) 
     echo "$url $urlstatus" >> urlstatus.txt 
    done < $1 

Je lis URL du fichier texte mais il ne traite qu'une seule à la fois, en prenant trop beaucoup de temps, GNU parallèle et xargs traitent également une ligne à la fois (testé)

Comment traiter l'URL simultanée pour le traitement afin d'améliorer la synchronisation? En d'autres mots de filetage de fichier URL plutôt que des commandes bash (qui parallèle GNU et xargs faire)

Input file is txt file and lines are separated as 
    ABC.Com 
    Bcd.Com 
    Any.Google.Com 

Something like this 
+0

Pourquoi ne pas lire le fichier et créer un script nohup différent pour chaque URL? –

+0

pouvez-vous élaborer plus – user7423959

+1

Qu'est-ce qui prend trop de temps exactement? S'il vous plaît donner un exemple. Une boucle 'bash' lisant 10 000 URL finira probablement avant les 2-3 premières commandes' curl', ce qui n'est pas le goulot d'étranglement et ne vaut pas l'optimisation. Utilisez simplement ** GNU Parallel ** pour exécuter les commandes 'curl'. –

Répondre

0

parallèle GNU et xargs traitent également d'une ligne à temps (testé)

Pouvez-vous donner un exemple de ceci? Si vous utilisez -j, vous devriez pouvoir exécuter beaucoup plus d'un processus à la fois.

Je voudrais écrire comme ceci:

doit() { 
    url="$1" 
    urlstatus=$(curl -o /dev/null --silent --head --write-out '%{http_code}' "${url}" --max-time 5) 
    echo "$url $urlstatus" 
} 
export -f doit 
cat "$1" | parallel -j0 -k doit >> urlstatus.txt 

Sur la base de l'entrée:

Input file is txt file and lines are separated as 
ABC.Com 
Bcd.Com 
Any.Google.Com 
Something like this 
www.google.com 
pi.dk 

Je reçois la sortie:

Input file is txt file and lines are separated as 000 
ABC.Com 301 
Bcd.Com 301 
Any.Google.Com 000 
Something like this 000 
www.google.com 302 
pi.dk 200 

qui semble correcte:

000 if domain does not exist 
301/302 for redirection 
200 for success 
+0

Je vais tester et vous faire savoir – user7423959

+0

hey j'ai obtenu le même code de statut 000 ,, pouvez-vous me dire comment vous exécutez votre script à partir du terminal, peut-il aider – user7423959

+0

'cat input.txt | parallel -j0 -k doit >> urlstatus.txt; 'Comme vous pouvez le voir, je reçois aussi 000 pour les domaines qui n'existent pas. Je me demande si vous nous fournissez un extrait de votre contribution. Si les 6 lignes ne se trouvent pas dans votre fichier d'entrée, pourriez-vous donner 10 lignes à partir de votre fichier d'entrée _actual_? –