web-dev-qa-db-fra.com

Comment réessayer les connexions avec wget?

J'ai une connexion Internet très instable et je dois parfois télécharger des fichiers de 200 Mo maximum.

Le problème est que la vitesse chute fréquemment et reste à --, -K/s et le processus reste actif. Je pensais juste envoyer des signaux KILL au processus, mais quand je lis dans le manuel wget à propos des signaux , cela n’aide en rien.

Comment puis-je forcer wget à se réinitialiser et à reprendre le téléchargement là où il s'est arrêté une fois la connexion établie et rétablie?

Je voudrais laisser wget courir et quand je reviendrai, je veux le voir se télécharger, sans attendre avec la vitesse --,-K/s.

27
Andrei

Afin d'éviter les situations --, -K/s, vous pouvez utiliser --read-timeout=seconds. Cela mettra fin à la connexion après le nombre de secondes.

Si vous avez besoin d'aller plus loin, vous pouvez utiliser cette configuration

wget --retry-connrefused --waitretry=1 --read-timeout=20 --timeout=15 -t 0

Ceci réessayera les connexions refusées et les erreurs similaires similaires (--retry-connrefused), il attendra 1 seconde avant la prochaine tentative (--waitretry), il attendra un maximum de 20 secondes si aucune donnée n'est reçue, puis réessayez (--read-timeout), il attendra au maximum 15 secondes avant l'expiration de la connexion initiale (--timeout), puis il réessayera un nombre infini de fois (-t 0).

Vous pouvez également vouloir placer ceci dans une boucle while afin d'éviter toute défaillance du réseau local ou similaire. Dans ce cas, vous devez également ajouter --continue afin de poursuivre le téléchargement là où vous l'avez laissé. Ce qui suit fonctionne bien dans Bash

while [ 1 ]; do
    wget --retry-connrefused --waitretry=1 --read-timeout=20 --timeout=15 -t 0 --continue
    if [ $? = 0 ]; then break; fi; # check return value, break if successful (0)
    sleep 1s;
done;

En guise de bonus, vous pouvez également utiliser --no-dns-cache dans le cas où l'hôte équilibre votre demande entre plusieurs serveurs par DNS.

Clause de non-responsabilité: je ne recommande pas l'utilisation de cette option car elle spammerait l'hôte au cas où la connexion serait instable et qu'il serait peu judicieux de la laisser non surveillée. Cependant, c’est ce que vous voulez au cas où vous auriez vraiment besoin de télécharger quelque chose et que votre connexion ne fonctionne pas correctement.

44
Bell

--tries=number

Cette option définit le nombre de tentatives à numéroter. Spécifiez 0 ou ‘inf’ pour une nouvelle tentative infinie.

wget --tries=70 http://example.com/myfile.Zip devrait le faire.

La valeur par défaut est de réessayer 20 fois, avec l'exception d'erreurs fatales du type "connexion refusée" ou "introuvable" (404), qui ne sont pas relancées. .

18
Manu

Cela aiderait-il? Sur askubuntu.com, j'ai trouvé une question très similaire à celle que vous demandez. Voici le lien vers ce site: https://askubuntu.com/questions/72663/how-to-make-wget-retry-download-if-speed-goes-below-certain- seuil

1
BenjiWiebe