¿Existe una herramienta existente que se pueda usar para descargar archivos grandes a través de una mala conexión?
Tengo que descargar regularmente un archivo relativamente pequeño: 300 MB, pero la conexión TCP lenta (80-120 KBytes / seg) se rompe aleatoriamente después de 10-120 segundos. (Es la red de una gran empresa. Contactamos a sus administradores (que trabajan desde India) varias veces, pero no pueden o no quieren hacer nada). El problema podría estar en sus servidores proxy / balanceadores de carga inversos.
Hasta ahora, utilizaba una versión modificada de pcurl: https://github.com/brunoborges/pcurl
Cambié esta línea:
curl -s --range ${START_SEG}-${END_SEG} -o ${FILENAME}.part${i} ${URL} &
a esto:
curl -s --retry 9999 --retry-delay 3 --speed-limit 2048 --speed-time 10 \
--retry-max-time 0 -C - --range ${START_SEG}-${END_SEG} -o ${FILENAME}.part${i} ${URL} &
Tuve que agregar --speed-limit 2048 --speed-time 10
porque la conexión casi siempre se cuelga durante minutos cuando falla.
Pero recientemente, incluso este script no se puede completar.
Un problema es que parece ignorar la -C -
parte, por lo que no "continúa" el segmento después de un reintento. Parece truncar el archivo temporal relacionado y comenzar desde el principio después de cada error. (Creo que el --range
y las -C
opciones no se pueden utilizar juntos.)
El otro problema es que este script descarga todos los segmentos al mismo tiempo. No puede tener 300 segmentos, de los cuales solo 10 se descargan a la vez.
Estaba pensando en escribir una herramienta de descarga en C # para este propósito específico, pero si hay una herramienta existente, o si el comando curl podría funcionar correctamente con diferentes parámetros, entonces podría dedicar algo de tiempo.
ACTUALIZACIÓN 1: Información adicional: la funcionalidad de descarga paralela no debe eliminarse, ya que tienen un límite de ancho de banda (80-120 Kbytes / seg, principalmente 80) por conexión, por lo que 10 conexiones pueden causar una aceleración de 10 veces. Tengo que terminar la descarga del archivo en 1 hora, porque el archivo se genera cada hora.
rsync
(que le permitirá reiniciar las transferencias)?lftp
También permite reiniciar automáticamente las transmisiones.