悪い接続で大きなファイルをダウンロードするために使用できる既存のツールはありますか?
300 MBの比較的小さなファイルを定期的にダウンロードする必要がありますが、低速(80〜120 Kバイト/秒)のTCP接続は10〜120秒後にランダムに切断されます。(それは大企業のネットワークです。私たちは彼らの管理者(インドで働いている)に何度も連絡しましたが、彼らは何もしたくない、またはしたくないのです。)問題はリバースプロキシ/ロードバランサーにあるかもしれません。
これまで、変更したバージョンのpcurlを使用していました:https : //github.com/brunoborges/pcurl
私はこの行を変更しました:
curl -s --range ${START_SEG}-${END_SEG} -o ${FILENAME}.part${i} ${URL} &
これに:
curl -s --retry 9999 --retry-delay 3 --speed-limit 2048 --speed-time 10 \
--retry-max-time 0 -C - --range ${START_SEG}-${END_SEG} -o ${FILENAME}.part${i} ${URL} &
--speed-limit 2048 --speed-time 10
接続が失敗した場合、ほとんどの場合接続が数分間ハングするだけなので、追加する必要がありました。
しかし最近、このスクリプトでさえ完了できません。
1つの問題は、-C -
部品を無視しているように見えるため、再試行後にセグメントを「継続」しないことです。関連する一時ファイルを切り捨て、失敗するたびに最初から開始するようです。(オプション--range
と-C
オプションは一緒に使用できないと思います。)
もう1つの問題は、このスクリプトがすべてのセグメントを同時にダウンロードすることです。300個のセグメントを持つことはできません。そのうち10個のみが一度にダウンロードされます。
この特定の目的のためにC#でダウンロードツールを作成することを考えていましたが、既存のツールがある場合、またはcurlコマンドが異なるパラメーターで適切に機能する場合は、時間を割くことができます。
更新1:追加情報:並列ダウンロード機能は、接続ごとに帯域幅の制限(80〜120 Kバイト/秒、主に80)があるため、削除しないでください。したがって、10接続で10倍の速度が向上します。ファイルは1時間ごとに生成されるため、ファイルのダウンロードは1時間で完了する必要があります。
rsync
(転送を再開できますか?)lftp
また、送信を自動的に再開することもできます。