インターネット接続が非常に不安定で、200 MBものファイルをダウンロードする必要がある場合があります。
問題は、速度が頻繁に低下して--, -K/s
そしてプロセスは生き続けます。いくつかのKILLシグナルをプロセスに送信するだけだと思っていましたが、私が読んだように シグナルに関するwgetマニュアルで は役に立ちません。
どうすればwget
にそれ自体を再初期化させ、接続が切れて再び戻ってきた後に中断したところからダウンロードを再開することができますか?
wget
を実行したままにしたいのですが、戻ってきたとき、ダウンロードを確認し、スピードを出さないようにしたいです--,-K/s
。
--, -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
を使用することもできます。
免責事項:接続が不安定な場合にホストをスパムし、監視しないでおくのは一種の賢明ではないため、これを使用することはお勧めしません。ただし、実際に何かをダウンロードする必要があり、接続が適切に機能しない場合に備えて、これが必要です。
--tries=number
このオプションは、再試行回数をnumberに設定します。無限に再試行する場合は、0または「inf」を指定します。
wget --tries=70 http://example.com/myfile.Zip
はそれを行うべきです。
デフォルトでは20回再試行されますが、再試行されない「接続が拒否されました」または「見つかりません」(404)などの致命的なエラーはexceptionになります。
これは役に立ちますか? askubuntu.comで、あなたの質問とよく似た質問を見つけました。これへのリンクは次のとおりです: https://askubuntu.com/questions/72663/how-to-make-wget-retry-download-if-speed-goes-below-certain-threshold