質問: wgetで接続を再試行する方法は? インターネット接続が非常に不安定で、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を使用することもできます。免責事項:接続が不安定な場合にホストをスパムし、監視しないでおくのは一種の賢明ではないため、これを使用することはお勧めしません。ただし、実際に何かをダウンロードする必要があり、接続が適切に機能しない場合に備えて、これが必要です。