2017-08-17 3 views
0

Contexte:
J'utilise wget (version 1.14-15.el7) sur RedHat Linux (version 7.3 (Maipo)), dans une Bash (version 4.2.46 (1)) Terminal. Malheureusement, je suis limité à cette image RHEL particulière, donc je ne peux pas passer à une version plus récente de wget.fonctionnalité d'attente dans Wget ne fonctionne pas comme prévu

Objectif:
Je suis en train de configurer wget afin que, si une tentative de téléchargement échoue, il effectue les opérations suivantes:
1) TENTATIVES le téléchargement 4 fois plus (total de 5 tentatives)
2) attend un laps de temps (30 secondes) entre tentatives de téléchargement (« ») retries

FIXE Pour le contexte, voici un extrait pertinent du manuel wget:

-w seconds 
    --wait=seconds 
     Wait the specified number of seconds between the retrievals. Use of this option is 
     recommended, as it lightens the server load by making the requests less frequent. 
     Instead of in seconds, the time can be specified in minutes using the "m" suffix, in 
     hours using "h" suffix, or in days using "d" suffix. 

     Specifying a large value for this option is useful if the network or the destination 
     host is down, so that Wget can wait long enough to reasonably expect the network error 
     to be fixed before the retry. The waiting interval specified by this function is 
     influenced by "--random-wait", which see. 

    --waitretry=seconds 
     If you don't want Wget to wait between every retrieval, but only between retries of 
     failed downloads, you can use this option. Wget will use linear backoff, waiting 1 
     second after the first failure on a given file, then waiting 2 seconds after the second 
     failure on that file, up to the maximum number of seconds you specify. 

     By default, Wget will assume a value of 10 seconds. 

Pour être clair, j'utilise le drapeau --wait, PAS le drapeau --waitretry.

processus:

D'abord, j'exporter/définir un mauvais http_proxy et https_proxy, pour assurer toute tentative de téléchargement expire.

J'exécutez la commande suivante: wget --tries=5 --wait=30 <url> -O <output_filename>

À ce stade, la fonctionnalité --wait ne fonctionne pas comme prévu. Plus précisément, il n'attend pas 30 secondes après chaque tentative de téléchargement.

À la place:
1) Après la première tentative, il attend 1s.
2) Après la 2ème tentative, il attend 2s.
3) Après la 3ème tentative, il attend 3s.
et ainsi de suite ...

En d'autres termes, malgré l'utilisation du drapeau --wait (ce qui devrait entraîner un temps d'attente entre les tentatives de téléchargement fixe), wget semble être l'exécution d'une « linéaire backoff » tel que décrit dans le --waitretry section de drapeau.

PROBLÈME:
Je veux la fonctionnalité du drapeau --wait, pas le drapeau --waitretry.

Malheureusement, le drapeau --wait semble agir comme le drapeau --waitretry - est-il un moyen de contourner ce bug apparent dans wget, de sorte que l'utilisation des --wait résultats de drapeau dans le temps d'attente fixe prévu entre les tentatives de téléchargement?

+0

Les questions sur le matériel informatique général et les logiciels sont hors sujet pour Stack Overflow à moins qu'ils ne concernent directement des outils utilisés principalement pour la programmation. Vous pouvez être en mesure d'obtenir de l'aide sur https://superuser.com/questions/tagged/linux – tink

+0

Merci, je vais le déplacer là. – Seth

Répondre

0

Comme vous pouvez le voir dans ce --help boîte de dialogue que vous avez fourni, je crois que vous devriez être en mesure d'utiliser --waitretry dans votre commande, quelque chose comme get --tries=5 --waitretry=30 <url> -O <output_filename> devrait fonctionner!

+0

Merci, mais en fait, je ne veux pas la fonctionnalité fournie par '--waitretry' (où wget effectue un backoff linéaire). Je cherche wget pour attendre un temps fixe entre les tentatives de téléchargement, qui DEVRAIT être fourni par le drapeau '--wait' mais, pour une raison quelconque, ne fonctionne pas. – Seth

+0

- 'wait' est utilisé comme un timeout, de sorte qu'il attend une réponse pendant x secondes, pas comme un sommeil entre les essais. Avec --wait = 30, il enverrait une requête et attendrait jusqu'à 30 secondes avant de tomber en panne à cause du timeout. –