Wget ile bağlantıları yeniden denemek nasıl?


29

Çok dengesiz bir internet bağlantım var ve bazen 200 MB kadar büyük dosyaları indirmem gerekiyor.

Sorun, hızın sık sık düşüp oturması ve --, -K/sişlemin canlı kalmasıdır. Sadece sürece bazı KILL sinyalleri göndermeyi düşündüm, ama wget kılavuzunda sinyaller hakkında okuduğumda işe yaramadı.

wgetBağlantıyı kestikten ve tekrar geri geldikten sonra kendini yeniden başlatmaya ve indirmeyi kaldığı yerden almaya zorlayabilirim ?

wgetKoşarken ayrılmak istiyorum ve geri döndüğümde, indirirken görmek ve hız ile beklememek istiyorum --,-K/s.

Yanıtlar:


47

--, -K/sDurumlardan kaçınmak için kullanabilirsiniz --read-timeout=seconds. Bu, birkaç saniye sonra bağlantıyı zaman aşımına uğrar.

Bunun ötesine geçmek gerekirse, bu kurulumu kullanabilirsiniz.

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

Bu, reddedilen bağlantıları ve benzeri önemli hataları --retry-connrefusedyeniden dener ( --waitretry), bir sonraki yeniden denemeden önce 1 saniye bekler ( ), hiçbir veri alınmadığında en fazla 20 saniye bekleyip tekrar deneyin ( --read-timeout), en fazla 15 saniye bekler ilk bağlantı zaman aşımına uğramadan önce ( --timeout) ve nihayetinde sonsuz sayıda ( -t 0) deneme yapacaktır .

whileYerel ağ arızasını ve benzeri şeyleri önlemek için bunu bir döngüye sokmak isteyebilirsiniz . Bu durumda --continue, indirdiğiniz yerden kaldığınız yerden devam etmek için eklemeniz gerekir . Aşağıdaki Bash de iyi çalışır

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;

Bonus ipucu olarak --no-dns-cache, sunucunun isteğinizi DNS ile birden çok sunucu arasında dengelemesi durumunda da kullanabilirsiniz .

Feragatname: Bağlantının dengesiz olması durumunda ana bilgisayarı istenmeyen postaya göndereceği ve denetlenmemesi oldukça akıllıca olduğu için bunu tavsiye etmiyorum. Bununla birlikte, gerçekten bir şeyler indirmeniz gerektiğine ve bağlantınızın uygun şekilde çalışmamasına rağmen istediğiniz şey budur.


2
varsayılan olarak --read-timeout=900. Sadece 15 dakika bekleyebilir ve wget indirmeyi yeniden başlatacak.
Boris

Bu "yeniden deneme" yardımınız için teşekkürler, ancak benim için hala% 100 çalışmıyor, çünkü wget şu şekilde bitiyor: SSL bağlantısı kurulamıyor. Bu hatayı denemez. Çoğaltmak için pkg.jenkins.io/debian/jenkins.io.key
Juraj Michalak

20

--tries=number

Bu seçenek yeniden deneme sayısını sayı olarak ayarlar. Sonsuz yeniden deneme için 0 veya 'inf' belirtin.

wget --tries=70 http://example.com/myfile.zip yapmalı.

Varsayılan, yeniden denenmeyen “bağlantı reddedildi” veya “bulunamadı” (404) gibi önemli hatalar haricinde , 20 kez yeniden denemektir.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.