Drossle die Download-Geschwindigkeit von wget oder curl während des Downloads

97

Ist es möglich, die Download-Geschwindigkeit von wgetoder zu drosseln (zu begrenzen) curl?

Ist es möglich, den Drosselklappenwert während des Herunterladens zu ändern?

Gautam
quelle
3
Nein, es ist nicht möglich, die Geschwindigkeit während des Herunterladens zu ändern. Gui-Download-Manager wie Fatrat oder Multiget
Ulrich Dangel
3
Sie können den Vorgang jedoch mit SIGSTOPoder Strg + z anhalten und später mit SIGCONToder fg fortsetzen. Dadurch sollte der Download-Vorgang unterbrochen werden.
Ulrich Dangel
Ich frage mich, ob es eine generische Möglichkeit gibt, ein laufendes Programm zu drosseln, z. B. durch Setzen einer Umgebungsvariablen.
Ehtesh Choudhury
@ ulrich-dangel --limit-rate = amount
Chrips

Antworten:

131

Ja, sowohl Wget als auch Curl unterstützen die Begrenzung Ihrer Download-Rate. Beide Optionen werden direkt in der Manpage erwähnt.

locken

   --limit-rate <speed>
          Specify the maximum transfer rate you want curl to use. 
           This feature is useful  if you  have a limited pipe and 
           you'd like your transfer not to use your entire bandwidth.

          The given speed is measured in bytes/second, unless a suffix 
          is appended.  Appending  'k'  or 'K' will count the number
          as kilobytes, 'm' or M' makes it megabytes, while 'g' or 'G' 
          makes it gigabytes. Examples: 200K, 3m and 1G.

Z.B: curl --limit-rate 423K

wget

   --limit-rate=amount
       Limit the download speed to amount bytes per second.  Amount may
       be expressed in bytes, kilobytes with the k suffix, or 
       megabytes with the m suffix.  For example, --limit-rate=20k will limit 
       the retrieval rate to 20KB/s.  This is useful when, for
       whatever reason, you don't want Wget to consume 
       the entire available bandwidth.

Z.B: wget --limit-rate=423k

Ulrich Dangel
quelle
2
Kann es dynamisch geändert werden, während ein Download ausgeführt wird?
Gautam
2
@GautamK Nein, da es weder interaktive Programme gibt wgetnoch curlgibt.
Ulrich Dangel
12
@GautamK Wenn der Server eine große Datei akzeptiert, können Sie den Prozess wgetoder beenden curlund mit wget -coder fortfahren curl -C. Wenn Sie einen laufenden Prozess wirklich neu konfigurieren müssen, verwenden Sie Trickle mit einem Daemon - die Einrichtung ist jedoch etwas kompliziert. Alternativ können Sie sich mit Traffic Shaping befassen. Auch hier ist die Einrichtung kompliziert.
Gilles
4

2 Jahre später werde ich diesen Leckerbissen einwerfen, während wgetund curlnicht interaktiv sind, zumindest wget(und möglicherweise, curlaber ich weiß es nicht genau) den -cSchalter hat (der für Fortfahren steht, von wo ich den Download früher abgebrochen habe). Wenn Sie also Ihre Geschwindigkeit in der Mitte eines Downloads ändern müssen und den -cSwitch vermutlich zusammen mit verwendet haben , können --limit-rate=xSie wgetihn mit einer anderen Geschwindigkeit anhalten und neu starten, und er würde sich ändern.

user82611
quelle
2

Es ist möglich, die Datenverkehrsrate mit den Tools tcund zu begrenzen netem, dies begrenzt jedoch die Rate für die Netzwerkschnittstelle des Computers. Ich gehe davon aus, dass Sie nur wgetoder curlkeine andere Anwendung verwenden, die Datenverkehr über die Netzwerkschnittstelle austauscht.

tc Steuert die Rate mithilfe des Token-Bucket-Filters (TBF).

Ein Beispiel für TBF wäre wie folgt (siehe http://www.lartc.org/manpages/tc-tbf.html ):

Um eine TBF mit einer anhaltenden maximalen Rate von 0,5 MBit / s zuzuordnen, muss ein Peakrate von 1,0 MBit / s, ein 5-Kilobyte-Puffer mit einer Größenbeschränkung vor der Bucket-Warteschlange so berechnet werden, dass die TBF bei perfektem Peakrate-Verhalten höchstens 70 ms Latenz verursacht , Problem:

# tc qdisc add dev eth0 root tbf rate 0.5mbit \ burst 5kb latency 70ms peakrate 1mbit \ minburst 1540

Ein weiteres Beispiel für die Verwendung von tc und netem ist (zu finden unter http://www.linuxfoundation.org/collaborate/workgroups/networking/netem ):

In der netem-Disziplin ist keine Geschwindigkeitskontrolle integriert. Verwenden Sie stattdessen eine der anderen Disziplinen, die die Geschwindigkeitskontrolle durchführen. In diesem Beispiel verwenden wir Token Bucket Filter (TBF), um die Ausgabe zu begrenzen.

Addiert die Verzögerung jedes Pakets, das die Schnittstelle eth0 durchläuft / passiert

 # tc qdisc add dev eth0 root handle 1:0 netem delay 100ms

um die Datenrate in tbf, die Paketpuffergröße und das maximale Burst-Limit zu addieren

 # tc qdisc add dev eth0 parent 1:1 handle 10: tbf rate 256kbit buffer 1600 limit 3000

Zeigt die Liste der in tc zugewiesenen Regeln für die Schnittstelle eth0 an

 # tc -s qdisc ls dev eth0

Die Ausgabe des obigen Befehls wäre wie folgt

 qdisc netem 1: limit 1000 delay 100.0ms
  Sent 0 bytes 0 pkts (dropped 0, overlimits 0 )
 qdisc tbf 10: rate 256Kbit burst 1599b lat 26.6ms
  Sent 0 bytes 0 pkts (dropped 0, overlimits 0 )

Überprüfen Sie die Optionen für den Puffer und das Limit, da Sie möglicherweise größere Standardwerte als diese benötigen (diese sind in Byte angegeben).

Abdul
quelle