23

У меня очень нестабильное интернет-соединение, и иногда приходится загружать файлы размером до 200 МБ.

Проблема заключается в том, что скорость часто падает и составляет --, -K/s и процесс остается активным. Я думал просто отправить несколько сигналов KILL процессу, но, как я читал в руководстве по wget о сигналах, это не помогает.

Как я могу заставить wget инициализировать себя и забрать загрузку с того места, где она была прервана после того, как соединение обрывается и снова возвращается?

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

3 ответа3

38

Чтобы избежать ситуаций --, -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 секунд, прежде чем истечет исходное время соединения (--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.

Отказ от ответственности: я не рекомендую использовать это, поскольку это будет спамить хост в случае нестабильного соединения, и было бы неразумно оставлять его без присмотра. Однако это то, что вам нужно, если вам действительно нужно что-то скачать, и ваше соединение не работает должным образом.

16

--tries=number

Эта опция устанавливает количество повторных попыток в число. Укажите 0 или «inf» для бесконечной повторной попытки.

wget --tries=70 http://example.com/myfile.zip должен это сделать.

По умолчанию повторяется 20 раз, за исключением фатальных ошибок, таких как «отказано в соединении» или «не найден» (404), которые не повторяются.

1

Это поможет? На askubuntu.com я нашел вопрос, очень похожий на тот, который вы задаете. Вот ссылка на него: https://askubuntu.com/questions/72663/how-to-make-wget-retry-download-if-speed-goes-below- sure-threshold

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .