web-dev-qa-db-ja.com

wgetで接続を再試行する方法は?

インターネット接続が非常に不安定で、200 MBものファイルをダウンロードする必要がある場合があります。

問題は、速度が頻繁に低下して--, -K/sそしてプロセスは生き続けます。いくつかのKILLシグナルをプロセスに送信するだけだと思っていましたが、私が読んだように シグナルに関するwgetマニュアルで は役に立ちません。

どうすればwgetにそれ自体を再初期化させ、接続が切れて再び戻ってきた後に中断したところからダウンロードを再開することができますか?

wgetを実行したままにしたいのですが、戻ってきたとき、ダウンロードを確認し、スピードを出さないようにしたいです--,-K/s

33
Andrei

--, -K/sの状況を回避するために、--read-timeout=secondsを使用できます。これにより、数秒後に接続がタイムアウトします。

それを超える必要がある場合は、この設定を使用できます

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

これは拒否された接続と同様の再試行を行います致命的エラー(--retry-connrefused)、次の再試行(--waitretry)の前に1秒待機します。データを受信せずに再試行します(--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;

おまけのヒントとして、ホストがDNSによって複数のサーバー間でリクエストを分散する場合に備えて、--no-dns-cacheを使用することもできます。

免責事項:接続が不安定な場合にホストをスパムし、監視しないでおくのは一種の賢明ではないため、これを使用することはお勧めしません。ただし、実際に何かをダウンロードする必要があり、接続が適切に機能しない場合に備えて、これが必要です。

50
Bell

--tries=number

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

wget --tries=70 http://example.com/myfile.Zipはそれを行うべきです。

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

24
Manu

これは役に立ちますか? askubuntu.comで、あなたの質問とよく似た質問を見つけました。これへのリンクは次のとおりです: https://askubuntu.com/questions/72663/how-to-make-wget-retry-download-if-speed-goes-below-certain-threshold

1
BenjiWiebe