วิธีการลองเชื่อมต่อกับ wget อีกครั้ง?


29

ฉันมีการเชื่อมต่ออินเทอร์เน็ตที่ไม่เสถียรและบางครั้งต้องดาวน์โหลดไฟล์ที่มีขนาดใหญ่ถึง 200 MB

ปัญหาคือความเร็วลดลงบ่อย ๆ และนั่งที่--, -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 วินาที ก่อนการเชื่อมต่อเริ่มต้นหมดเวลา ( --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) ซึ่งยังไม่ได้ลองใหม่


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.