web-dev-qa-db-fra.com

wget utilisant --timeout et --tries ensemble

Combien de temps attendriez-vous que cette commande prenne avant de quitter?

wget --timeout=1 --tries=2 "http://www.google.com:81/not-there"

Je m'attendrais à un délai d'attente de 1 seconde et 2 essais signifieraient 2 secondes, mais cela prend 6,025 secondes

wget --timeout=1 --tries=2 "http://www.google.com:81/not-there"
--2017-04-27 16:49:12--http://www.google.com:81/not-there
Resolving www.google.com (www.google.com)... 209.85.203.105, 209.85.203.103, 209.85.203.99, ...
Connecting to www.google.com (www.google.com)|209.85.203.105|:81... failed: Connection timed out.
Connecting to www.google.com (www.google.com)|209.85.203.103|:81... failed: Connection timed out.
Connecting to www.google.com (www.google.com)|209.85.203.99|:81... failed: Connection timed out.
Connecting to www.google.com (www.google.com)|209.85.203.104|:81... failed: Connection timed out.
Connecting to www.google.com (www.google.com)|209.85.203.106|:81... failed: Connection timed out.
Connecting to www.google.com (www.google.com)|209.85.203.147|:81... failed: Connection timed out.
Connecting to www.google.com (www.google.com)|2a00:1450:4009:80d::2004|:81... failed: Network is unreachable.

Je ne sais pas pourquoi il essaie 6 fois avant d'arrêter.

Il semble que tries soit pour une nouvelle tentative. Si je mets --retry-connrefused il fait au moins la nouvelle tentative, mais le temps total pris n'est pas ce à quoi je m'attendais. J'aimerais pouvoir décider combien de fois il doit essayer un timeout.

Modifier :

Après une suggestion de @Socowi, j'ai essayé d'utiliser waitretry en combinaison avec retry-connrefused et j'ai eu le même comportement:

$ wget --timeout=1 --waitretry=0 --tries=2 --retry-connrefused "http://www.google.com:81/not-there"
--2017-04-27 20:29:47--  http://www.google.com:81/not-there
Resolving www.google.com (www.google.com)... 2a00:1450:400b:c00::68, 209.85.203.99, 209.85.203.147, ...
Connecting to www.google.com (www.google.com)|2a00:1450:400b:c00::68|:81... failed: Connection timed out.
Connecting to www.google.com (www.google.com)|209.85.203.99|:81... failed: Connection timed out.
Connecting to www.google.com (www.google.com)|209.85.203.147|:81... failed: Connection timed out.
Connecting to www.google.com (www.google.com)|209.85.203.103|:81... failed: Connection timed out.
Connecting to www.google.com (www.google.com)|209.85.203.104|:81... failed: Connection timed out.
Connecting to www.google.com (www.google.com)|209.85.203.106|:81... failed: Connection timed out.
Connecting to www.google.com (www.google.com)|209.85.203.105|:81... failed: Connection timed out.
Retrying.

--2017-04-27 20:29:54--  (try: 2)  http://www.google.com:81/not-there
Connecting to www.google.com (www.google.com)|2a00:1450:400b:c00::68|:81... failed: Connection timed out.
Connecting to www.google.com (www.google.com)|209.85.203.99|:81... failed: Connection timed out.
Connecting to www.google.com (www.google.com)|209.85.203.147|:81... failed: Connection timed out.
Connecting to www.google.com (www.google.com)|209.85.203.103|:81... failed: Connection timed out.
Connecting to www.google.com (www.google.com)|209.85.203.104|:81... failed: Connection timed out.
Connecting to www.google.com (www.google.com)|209.85.203.106|:81... failed: Connection timed out.
Connecting to www.google.com (www.google.com)|209.85.203.105|:81... failed: Connection timed out.
Giving up.

Modifier deux

J'étais vraiment confus lorsque deux commandes identiques se comportaient différemment.

root@8c59d6dd05fe:/var/www/html# wget --timeout=1 --waitretry=0 --tries=2 --retry-connrefused "http://www.google.com:81/not-there"
converted 'http://www.google.com:81/not-there' (ANSI_X3.4-1968) -> 'http://www.google.com:81/not-there' (UTF-8)
--2017-04-27 19:50:28--  http://www.google.com:81/not-there
Resolving www.google.com (www.google.com)... 216.58.211.164, 2a00:1450:4009:805::2004
Connecting to www.google.com (www.google.com)|216.58.211.164|:81... failed: Connection timed out.
Connecting to www.google.com (www.google.com)|2a00:1450:4009:805::2004|:81... failed: Cannot assign requested address.
Retrying.

--2017-04-27 19:50:29--  (try: 2)  http://www.google.com:81/not-there
Connecting to www.google.com (www.google.com)|216.58.211.164|:81... failed: Connection timed out.
Connecting to www.google.com (www.google.com)|2a00:1450:4009:805::2004|:81... failed: Cannot assign requested address.
Giving up.

root@8c59d6dd05fe:/var/www/html# wget --timeout=1 --waitretry=0 --tries=2 --retry-connrefused "http://www.google.com:81/not-there"
converted 'http://www.google.com:81/not-there' (ANSI_X3.4-1968) -> 'http://www.google.com:81/not-there' (UTF-8)
--2017-04-27 19:50:35--  http://www.google.com:81/not-there
Resolving www.google.com (www.google.com)... 209.85.203.104, 209.85.203.147, 209.85.203.106, ...
Connecting to www.google.com (www.google.com)|209.85.203.104|:81... failed: Connection timed out.
Connecting to www.google.com (www.google.com)|209.85.203.147|:81... failed: Connection timed out.
Connecting to www.google.com (www.google.com)|209.85.203.106|:81... failed: Connection timed out.
Connecting to www.google.com (www.google.com)|209.85.203.103|:81... failed: Connection timed out.
Connecting to www.google.com (www.google.com)|209.85.203.105|:81... failed: Connection timed out.
Connecting to www.google.com (www.google.com)|209.85.203.99|:81... failed: Connection timed out.
Connecting to www.google.com (www.google.com)|2a00:1450:400b:c03::68|:81... failed: Cannot assign requested address.
Retrying.

--2017-04-27 19:50:41--  (try: 2)  http://www.google.com:81/not-there
Connecting to www.google.com (www.google.com)|209.85.203.104|:81... failed: Connection timed out.
Connecting to www.google.com (www.google.com)|209.85.203.147|:81... failed: Connection timed out.
Connecting to www.google.com (www.google.com)|209.85.203.106|:81... failed: Connection timed out.
Connecting to www.google.com (www.google.com)|209.85.203.103|:81... failed: Connection timed out.
Connecting to www.google.com (www.google.com)|209.85.203.105|:81... failed: Connection timed out.
Connecting to www.google.com (www.google.com)|209.85.203.99|:81... failed: Connection timed out.
Connecting to www.google.com (www.google.com)|2a00:1450:400b:c03::68|:81... failed: Cannot assign requested address.
Giving up.

Je pensais que je devenais un peu fou, mais ce n'est que lorsque @Socowi a souligné dans les commentaires que les adresses IP de chaque nouvelle tentative étaient différentes qu'il cliquait. Cela dépend du nombre d'IP possibles renvoyées. Le numéro magique 7 (nouvelles tentatives) que je voyais était le numéro des options IP. Lorsque je choisis juste une adresse IP spécifique, il ne l'essaye qu'une seule fois.

9
mickadoo

Nombre de tentatives incorrect

Votre wget semble résoudre l'URL en plusieurs adresses IP comme indiqué dans la deuxième ligne de la sortie de votre wget. Chaque IP est ensuite testée avec le délai spécifié. Malheureusement, je n'ai trouvé aucune option pour limiter la recherche DNS à une seule adresse ou définir un délai total pour toutes les IP ensemble. Mais vous pouvez essayer d'utiliser "<googles ip address>:81/not-there" Au lieu de l'URL.

Délai d'attente apparemment trop long

Comme vous l'avez déjà découvert, la définition de --retry-connrefused Permet à wget de réessayer même après une erreur de connexion "". Le délai spécifié est utilisé pour chaque nouvelle tentative, mais entre les nouvelles tentatives, il y aura une pause qui s'allonge après chaque nouvelle tentative.

Exemple

wget --timeout=1 --tries=5 --retry-connrefused URL

fait quelque chose comme

try to connect for 1 second
failed -> wait 1 second
try to connect for 1 second
failed -> wait 2 seconds
try to connect for 1 second
failed -> wait 3 second
try to connect for 1 second
failed -> wait 4 second
try to connect for 1 second

Par conséquent, la commande prend tries * timeout + 1 + 2 + ... + (tries - 1) secondes. Ce comportement est spécifié dans man wget Sous l'option, ce qui vous permet de le changer :)

- attente = secondes
Si vous ne voulez pas que Wget attende entre chaque récupération, mais uniquement entre les tentatives de téléchargements ayant échoué, vous pouvez utiliser cette option. Wget utilisera interruption linéaire, en attendant 1 seconde après le premier échec sur un fichier donné, puis en attendant 2 secondes après le deuxième échec sur ce fichier, jusqu'au nombre maximum de secondes que vous spécifiez.

Par défaut, Wget prendra une valeur de 10 secondes.

Je pense que vous vouliez utiliser quelque chose comme

wget --timeout=1 --waitretry=0 --tries=5 --retry-connrefused URL

ce qui élimine la pause entre deux tentatives, ce qui donne un temps total de timeout * tries.

10
Socowi