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再試行し(--waitretry)、次の再試行の1秒前に待機し()、データが受信されない場合に最大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はダウンロードを再開します。
ボリス

この「再試行」の助けに感謝しますが、私にとってはwgetがSSL接続を確立できませんで終わるため、まだ100%動作しません。そのエラーで再試行しません。再現するには、pkg.jenkins.io / debian / jenkins.io.key
Juraj Michalak

20

--tries=number

このオプションは、再試行回数をnumberに設定します。無限に再試行するには、0または 'inf'を指定します。

wget --tries=70 http://example.com/myfile.zip それを行う必要があります。

デフォルトでは20回再試行されますが、「接続拒否」や「見つかりません」などの致命的なエラー(404)は例外で、再試行されません。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.