Czy istnieje narzędzie, które można wykorzystać do pobierania dużych plików w przypadku złego połączenia?
Muszę regularnie pobierać stosunkowo mały plik: 300 MB, ale powolne (80-120 KBytes / s) połączenie TCP losowo przerywa się po 10-120 sekundach. (Jest to sieć dużej firmy. Wielokrotnie kontaktowaliśmy się z ich administratorami (pracującymi z Indii), ale oni nie mogą lub nie chcą nic robić.) Problem może dotyczyć ich odwrotnych serwerów proxy / równoważenia obciążenia.
Do tej pory korzystałem ze zmodyfikowanej wersji pcurl: https://github.com/brunoborges/pcurl
Zmieniłem tę linię:
curl -s --range ${START_SEG}-${END_SEG} -o ${FILENAME}.part${i} ${URL} &
do tego:
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} &
Musiałem dodać, --speed-limit 2048 --speed-time 10
ponieważ połączenie zwykle zawiesza się przez kilka minut, gdy nie powiedzie się.
Ale ostatnio nawet ten skrypt nie może zostać ukończony.
Jednym z problemów jest to, że wydaje się ignorować -C -
część, więc nie „kontynuuje” segmentu po ponownej próbie. Wygląda na to, że obcina odpowiedni plik tymczasowy i zaczyna się od początku po każdym niepowodzeniu. (Myślę, że --range
i -C
opcji nie można używać razem.)
Innym problemem jest to, że ten skrypt pobiera wszystkie segmenty jednocześnie. Nie może mieć 300 segmentów, z których jednocześnie pobieranych jest tylko 10.
Myślałem o napisaniu narzędzia do pobierania w C # do tego konkretnego celu, ale jeśli istnieje narzędzie lub jeśli polecenie curl może działać poprawnie z różnymi parametrami, mógłbym poświęcić trochę czasu.
AKTUALIZACJA 1: Informacje dodatkowe: Funkcji pobierania równoległego nie należy usuwać, ponieważ mają one limit przepustowości (80-120 kB / s, głównie 80) na połączenie, więc 10 połączeń może spowodować 10-krotne przyspieszenie. Pobieranie pliku muszę zakończyć w ciągu 1 godziny, ponieważ plik jest generowany co godzinę.
rsync
(co pozwoli Ci ponownie uruchomić przelewy)?lftp
pozwala również na automatyczne restartowanie transmisji.