¿Cómo volver a intentar las conexiones con wget?

29

Tengo una conexión a Internet muy inestable y, a veces, tengo que descargar archivos de hasta 200 MB.

El problema es que la velocidad cae y se asienta con frecuencia --, -K/sy el proceso sigue vivo. Pensé en enviar algunas señales de KILL al proceso, pero como leí en el manual de wget sobre señales , no ayuda.

¿Cómo puedo wgetobligarme a reinicializar y retomar la descarga donde la dejó después de que la conexión se caiga y vuelva a subir?

Me gustaría salir wgetcorriendo, y cuando regrese, quiero ver que se descargue y no espere con rapidez --,-K/s.

Andrei
fuente

Respuestas:

47

Para evitar las --, -K/ssituaciones que puedes usar --read-timeout=seconds. Esto expirará la conexión después de la cantidad de segundos.

Si necesita ir más allá, puede usar esta configuración

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

Esto reintentará conexiones rechazadas y errores fatales similares ( --retry-connrefused), esperará 1 segundo antes del próximo reintento ( --waitretry), esperará un máximo de 20 segundos en caso de que no se reciban datos y luego vuelva a intentarlo ( --read-timeout), esperará un máximo de 15 segundos antes de que la conexión inicial agote el tiempo de espera ( --timeout) y finalmente volverá a intentar un número infinito de veces ( -t 0).

También es posible que desee poner esto en un whilebucle para evitar fallas en la red local y similares. En este caso, también debe agregar --continuepara continuar la descarga donde la dejó. Lo siguiente funciona bien en 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;

Como consejo adicional, también puede usarlo --no-dns-cacheen caso de que el host equilibre su solicitud entre varios servidores mediante DNS.

Descargo de responsabilidad: no recomiendo usar esto, ya que enviará correo no deseado al host en caso de que la conexión sea inestable y no sea aconsejable dejarlo sin supervisión. Sin embargo, esto es lo que desea en caso de que realmente necesite descargar algo y su conexión no funcione adecuadamente.

Campana
fuente
2
de forma predeterminada --read-timeout=900. Podrías esperar 15 minutos y wget reiniciará la descarga.
Boris
Gracias por esta ayuda de "reintento", pero para mí todavía no funciona al 100%, porque wget termina con: No se puede establecer la conexión SSL. No vuelve a intentar ese error. Para reproducir, intente wget pkg.jenkins.io/debian/jenkins.io.key
Juraj Michalak
20

--tries=number

Esta opción establece el número de reintentos en número. Especifique 0 o 'inf' para reintentos infinitos.

wget --tries=70 http://example.com/myfile.zip Deberías hacerlo.

El valor predeterminado es volver a intentarlo 20 veces, con la excepción de errores fatales como "conexión rechazada" o "no encontrado" (404), que no se vuelven a intentar.

Manu
fuente