Làm thế nào để thử lại kết nối với wget?


29

Tôi có kết nối internet rất không ổn định và đôi khi phải tải xuống các tệp lớn tới 200 MB.

Vấn đề là tốc độ thường xuyên giảm xuống và ngồi xuống --, -K/svà quá trình vẫn còn sống. Tôi nghĩ chỉ cần gửi một số tín hiệu KILL cho quá trình, nhưng khi tôi đọc trong hướng dẫn wget về các tín hiệu thì không có ích gì.

Làm cách nào tôi có thể buộc wgetphải xác định lại chính nó và chọn tải xuống ở nơi nó dừng lại sau khi kết nối bị rớt và trở lại một lần nữa?

Tôi muốn tiếp tục wgetchạy, và khi tôi quay lại, tôi muốn thấy nó tải xuống, và không chờ đợi với tốc độ --,-K/s.

Câu trả lời:


47

Để tránh các --, -K/stình huống bạn có thể sử dụng --read-timeout=seconds. Điều này sẽ hết thời gian kết nối sau số giây.

Nếu bạn cần đi xa hơn, bạn có thể sử dụng thiết lập này

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

Điều này sẽ thử lại các kết nối bị từ chối và các lỗi nghiêm trọng tương tự ( --retry-connrefused), nó sẽ đợi 1 giây trước khi thử lại tiếp theo ( --waitretry), nó sẽ đợi tối đa 20 giây trong trường hợp không nhận được dữ liệu và sau đó thử lại ( --read-timeout), nó sẽ đợi tối đa 15 giây trước khi kết nối ban đầu hết thời gian ( --timeout) và cuối cùng nó sẽ thử lại vô số lần ( -t 0).

Bạn cũng có thể muốn đặt điều này trong một whilevòng lặp để tránh lỗi mạng cục bộ và tương tự. Trong trường hợp này, bạn cũng cần thêm --continueđể tiếp tục tải xuống nơi bạn rời đi. Sau đây hoạt động tốt trong 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;

Là một mẹo thưởng, bạn cũng có thể sử dụng --no-dns-cachetrong trường hợp máy chủ cân bằng yêu cầu của bạn giữa nhiều máy chủ bằng DNS.

Tuyên bố miễn trừ trách nhiệm: Tôi không khuyên bạn nên sử dụng tính năng này vì nó sẽ spam máy chủ trong trường hợp kết nối không ổn định và việc để nó không bị giám sát là không khôn ngoan. Tuy nhiên đây là những gì bạn muốn trong trường hợp bạn thực sự cần tải xuống một cái gì đó và kết nối của bạn không hoạt động đầy đủ.


2
theo mặc định --read-timeout=900. Bạn có thể đợi 15 phút và wget sẽ khởi động lại tải xuống.
Boris

Cảm ơn sự giúp đỡ "thử lại" này, nhưng đối với tôi nó vẫn không hoạt động 100%, vì wget kết thúc bằng: Không thể thiết lập kết nối SSL. Nó không thử lại về lỗi đó. Để sao chép, hãy cố gắng quên pkg.jenkins.io/debian/jenkins.io.key
Juraj Michalak

20

--tries=number

Tùy chọn này đặt số lần thử lại thành số. Chỉ định 0 hoặc 'inf' để thử lại vô hạn.

wget --tries=70 http://example.com/myfile.zip Hãy làm nó.

Mặc định là thử lại 20 lần, ngoại trừ các lỗi nghiêm trọng như kết nối của Google bị từ chối, hoặc không tìm thấy được (404), không được thử lại.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.