Bagaimana cara mencoba kembali koneksi dengan wget?

29

Saya memiliki koneksi internet yang sangat tidak stabil, dan kadang-kadang harus mengunduh file berukuran 200 MB.

Masalahnya adalah bahwa kecepatan sering turun dan duduk --, -K/sdan prosesnya tetap hidup. Saya pikir hanya untuk mengirim beberapa sinyal KILL ke proses, tetapi ketika saya membaca di wget manual tentang sinyal itu tidak membantu.

Bagaimana saya bisa memaksa wgetuntuk menginisialisasi ulang sendiri dan mengambil unduhan di mana ia tinggalkan setelah koneksi turun dan kembali lagi?

Saya ingin tetap wgetberjalan, dan ketika saya kembali, saya ingin melihatnya mengunduh, dan tidak menunggu dengan cepat --,-K/s.

Andrei
sumber

Jawaban:

47

Untuk menghindari --, -K/ssituasi yang dapat Anda gunakan --read-timeout=seconds. Ini akan memutuskan koneksi setelah jumlah detik.

Jika Anda perlu melampaui itu, Anda dapat menggunakan pengaturan ini

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

Ini akan mencoba kembali koneksi yang ditolak dan kesalahan fatal serupa ( --retry-connrefused), akan menunggu 1 detik sebelum coba lagi berikutnya ( --waitretry), akan menunggu maksimal 20 detik jika tidak ada data yang diterima dan kemudian coba lagi ( --read-timeout), ia akan menunggu maks 15 detik sebelum koneksi awal habis ( --timeout) dan akhirnya akan mencoba lagi beberapa kali ( -t 0).

Anda mungkin juga ingin meletakkan ini dalam satu whilelingkaran untuk menghindari kegagalan jaringan lokal dan sejenisnya. Dalam hal ini Anda juga perlu menambahkan --continueuntuk melanjutkan unduhan di mana Anda tinggalkan. Berikut ini berfungsi dengan baik di 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;

Sebagai tip bonus, Anda juga dapat menggunakan --no-dns-cachejika tuan rumah menyeimbangkan permintaan Anda antara beberapa server dengan DNS.

Penafian: Saya tidak merekomendasikan penggunaan ini karena akan meng-spam tuan rumah jika koneksi tidak stabil dan agak tidak bijaksana membiarkannya tidak diawasi. Namun inilah yang Anda inginkan jika Anda benar-benar perlu mengunduh sesuatu dan koneksi Anda tidak berfungsi dengan baik.

Bel
sumber
2
secara default --read-timeout=900. Anda bisa menunggu 15 menit dan wget akan memulai kembali mengunduh.
Boris
Terima kasih atas bantuan "coba lagi" ini, tetapi bagi saya itu masih tidak berfungsi 100%, karena wget berakhir dengan: Tidak dapat membuat koneksi SSL. Itu tidak mengulangi kesalahan itu. Untuk mereproduksi, coba wget pkg.jenkins.io/debian/jenkins.io.key
Juraj Michalak
20

--tries=number

Opsi ini mengatur jumlah coba lagi ke nomor. Tentukan 0 atau 'inf' untuk mencoba ulang tanpa batas.

wget --tries=70 http://example.com/myfile.zip harus melakukannya.

Standarnya adalah coba lagi 20 kali, dengan pengecualian kesalahan fatal seperti "koneksi ditolak" atau "tidak ditemukan" (404), yang tidak diulang lagi.

Manu
sumber