Як повторити з'єднання з wget?


29

У мене дуже нестабільне підключення до Інтернету, і іноді доводиться завантажувати файли розміром до 200 Мб.

Проблема полягає в тому, що швидкість часто падає і сидить, --, -K/sі процес залишається живим. Я думав просто надіслати декілька сигналів KILL до процесу, але, як я читав у посібнику від wget про сигнали, це не допомагає.

Як я можу змусити wgetсебе повторно ініціалізувати та вибрати завантаження там, де воно припинилося після того, як з'єднання перестане і знову з'явиться?

Я хотів би залишити wgetбіг, а коли повернусь, хочу побачити, як це завантажується, а не чекати зі швидкістю --,-K/s.

Відповіді:


47

Щоб уникнути --, -K/sситуацій, якими ви можете скористатися --read-timeout=seconds. Це закінчить час з'єднання через кількість секунд.

Якщо вам потрібно вийти за рамки, ви можете скористатися цією установкою

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

Це повторить відмовлені підключення та подібні фатальні помилки ( --retry-connrefused), він зачекатиме 1 секунду перед наступним повтором ( --waitretry), буде чекати максимум 20 секунд, якщо даних не буде отримано, а потім спробуйте ще раз ( --read-timeout), буде чекати максимум 15 секунд до початкових тайм-аутів з'єднання out ( --timeout), і, нарешті, він повторить нескінченну кількість разів ( -t 0).

Ви також можете поставити це в whileцикл, щоб уникнути поломки локальної мережі тощо. У цьому випадку вам також потрібно додати --continue, щоб продовжити завантаження там, де ви зупинилися. Наступне добре працює в 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;

Як бонусний підказку ви можете також використовувати, --no-dns-cacheякщо хост збалансує ваш запит між декількома серверами DNS.

Відмова від відповідальності: я не рекомендую використовувати це, оскільки воно буде спамувати хост у випадку, якщо з'єднання нестабільне, і це нерозумно залишати його без нагляду. Однак це те, що ви хочете, якщо вам дійсно потрібно щось завантажити і ваше з'єднання не працює належним чином.


2
за замовчуванням --read-timeout=900. Ви можете просто почекати 15 хвилин, і wget відновить завантаження.
Борис

Дякую за цю "повторну" допомогу, але для мене вона все ще не працює 100%, тому що wget закінчується на: Неможливо встановити SSL-з'єднання. Він не повторює цю помилку. Для відтворення спробуйте wget pkg.jenkins.io/debian/jenkins.io.key
Juraj Michalak

20

--tries=number

Цей параметр встановлює кількість повторень на номер. Вкажіть 0 або "inf" для нескінченного повторного спроби.

wget --tries=70 http://example.com/myfile.zip повинен це зробити.

За замовчуванням - повторити спробу 20 разів, за винятком фатальних помилок, таких як "з'єднання відмовлено" або "не знайдено" (404), які не повторюються.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.