Jak ponowić próbę połączenia z wget?

29

Mam bardzo niestabilne połączenie internetowe i czasami muszę pobierać pliki o wielkości nawet 200 MB.

Problem polega na tym, że prędkość często spada i zatrzymuje się, --, -K/sa proces pozostaje żywy. Myślałem, że po prostu wyślę kilka sygnałów KILL do procesu, ale kiedy czytam w instrukcji wget o sygnałach, to nie pomaga.

Jak mogę zmusić wgetdo ponownego zainicjowania się i wybrać pobieranie tam, gdzie zostało przerwane po zerwaniu połączenia i ponownym uruchomieniu?

Chciałbym odejść z wgetpracy, a kiedy wrócę, chcę, aby pobierała i nie czekała z dużą szybkością --,-K/s.

Andrei
źródło

Odpowiedzi:

47

Aby uniknąć --, -K/ssytuacji, których możesz użyć --read-timeout=seconds. Spowoduje to przekroczenie limitu czasu połączenia po upływie kilku sekund.

Jeśli chcesz wyjść poza to, możesz skorzystać z tej konfiguracji

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

Spowoduje to ponowienie próby odrzucenia połączeń i podobnych błędów krytycznych ( --retry-connrefused), odczeka 1 sekundę przed kolejną próbą ( --waitretry), odczeka maksymalnie 20 sekund w przypadku braku danych, a następnie spróbuje ponownie (--read-timeout ), poczeka maksymalnie 15 sekund przed początkowym limitem czasu połączenia ( --timeout) i na końcu spróbuje powtórzyć nieskończoną liczbę razy ( -t 0).

Możesz także umieścić to w whilepętli, aby uniknąć awarii sieci lokalnej i tym podobnych. W takim przypadku musisz również dodać --continue, aby kontynuować pobieranie od miejsca, w którym zostało przerwane. Następujące działa dobrze w 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;

Jako wskazówkę dodatkową możesz także użyć --no-dns-cache z opcji równoważenia żądania hosta między wieloma serwerami przez DNS.

Oświadczenie: Nie polecam korzystania z tego, ponieważ spowoduje to spam hosta w przypadku, gdy połączenie jest niestabilne i niemądrze jest pozostawiać go bez nadzoru. Jednak tego właśnie chcesz, jeśli naprawdę musisz coś pobrać, a twoje połączenie nie działa odpowiednio.

dzwon
źródło
2
domyślnie --read-timeout=900. Możesz poczekać 15 minut, a wget ponownie rozpocznie pobieranie.
Boris,
Dzięki za tę „ponowną” pomoc, ale dla mnie wciąż nie działa w 100%, ponieważ wget kończy się na: Nie można nawiązać połączenia SSL. Nie ponawia próby na tym błędzie. Do odtworzenia spróbuj wget pkg.jenkins.io/debian/jenkins.io.key
Juraj Michalak
20

--tries=number

Ta opcja ustawia liczbę ponownych prób na liczbę. Podaj 0 lub „inf” dla nieskończonego ponawiania.

wget --tries=70 http://example.com/myfile.zip powinien to zrobić.

Domyślnie ponawia się 20 razy, z wyjątkiem krytycznych błędów, takich jak „odmowa połączenia” lub „nie znaleziono” (404), które nie są ponawiane.

Manu
źródło