Hallo, ich brauche mal eine Hilfe. Ich habe hier etliche Files (der einfachkeit halber habe ich es alles mal in eine datei "gecattet"), in denen untereinander http-adressen aufgelistet sind. Um genau zu sein, es sind ram-dateien. Ich möchte die links da drin (manchmal einer, manchmal mehr) mit wget downloaden. Da nun aber der Speed irgendwie immer nur 10 kb/s oder so ist, möchte ich immer 10 (oder halt eine begrenzte Anzahl) downloads Gleichzeitig machen. Dazu möchte ich ein script machen.... Mir fehlt auch irgendwie noch der Ansatz dazu. Ich schätze, dazu benötigt man screen, oder? Ich habe ähnliches mal mit screen -d -m probiert. Leider war es irgendwie erfolglos. Ich habe hier soetwas ausprobiert: for i in `cat blabblubb`; do screen -d -m wget $i & ;done; Leider fehlt mir noch einiges..... wäre toll, wenn mir jemand dabei behilflich sein könnte! Gruß Sören
Hallo, Am Mon, 12 Apr 2004, Soeren Wengerowsky schrieb:
Ich habe hier etliche Files (der einfachkeit halber habe ich es alles mal in eine datei "gecattet"), in denen untereinander http-adressen aufgelistet sind. Um genau zu sein, es sind ram-dateien. Ich möchte die links da drin (manchmal einer, manchmal mehr) mit wget downloaden. Da nun aber der Speed irgendwie immer nur 10 kb/s oder so ist, möchte ich immer 10 (oder halt eine begrenzte Anzahl) downloads Gleichzeitig machen. Dazu möchte ich ein script machen....
Du suchst '| xargs -n 10 wget'. -dnh -- If you haven't got time to RTFM, you haven't got time to whine on this mailing list.
Am Montag, 12. April 2004 23:29 schrieb David Haller:
Du suchst '| xargs -n 10 wget'.
Wie würdest du das dann anwenden? for i in `cat liste` ; do xargs -n 10 wget $i done ich habs so probiert... leider hat es irgendwie nicht geklappt..... Was wolltest du mit der | am anfang andeuten? vielen Dank Gruß Sören
Hallo, Am Tue, 13 Apr 2004, Soeren Wengerowsky schrieb:
Am Montag, 12. April 2004 23:29 schrieb David Haller:
Du suchst '| xargs -n 10 wget'.
Wie würdest du das dann anwenden?
cat liste | xargs wget -n 10 wget Aber Axel hat recht, das macht etwas anderes als du willst... -dnh -- If you haven't got time to RTFM, you haven't got time to whine on this mailing list.
Hi On Monday 12 April 2004 22:59, Soeren Wengerowsky wrote:
Um genau zu sein, es sind ram-dateien. Ich möchte die links da drin (manchmal einer, manchmal mehr) mit wget downloaden. Da nun aber der Speed irgendwie immer nur 10 kb/s oder so ist, möchte ich immer 10 (oder halt eine begrenzte Anzahl) downloads Gleichzeitig machen. Dazu möchte ich ein script machen.... Mir fehlt auch irgendwie noch der Ansatz dazu.
Ich schätze, dazu benötigt man screen, oder? screen brauchst du nur wenn du dich ausloggen willst und im Hintergrund ein Prozess mit shell weiterlaufen soll. Ich habe ähnliches mal mit screen -d -m probiert. Leider war es irgendwie erfolglos. Was du eher brauchst ist wget -b.
Ich habe hier soetwas ausprobiert: for i in `cat blabblubb`; do screen -d -m wget $i & ;done; Wenn dann eher for i in `cat blabblubb`; do wget -b $i ; done Und auch das, würde ich zur Übersicht in ein Skript schreiben.
Ich weiß jetzt nicht genau was ram-Dateien sind. Obiges funktioniert nur, wenn in blabblubb nur die links stehen. Wenn da noch einige Zeilen sonstiger Kram drinstehen, dann verstopft dein System nur mit wget-tasks die früher oder später irgendeinen Fehler produzieren. Selbst wenn in der Datei nur links stehen kann das zur Überlastung des Systems führen. Die von dir vorgeschlagene Begrenzung auf 10 wget-Instanzen fehlt noch. xargs -n 10 hilft auch nicht wirklich (Ich fürchte David hat dich nicht richtig verstnden). Das würde nur ein wget mit maximal 10 URLs starten. Da müsste man wohl wget -n [Anzahl_links/10] --max-procs=0 arbeiten. Aber dann ist da wieder das Problem mit der möglicherweise hohen Anzahl von wget-Instanzen und der daraus resultierenden Systemlast. Ohne es getestet zu haben würde ich ein while ((` ps |grep wget |wc -l` < 10 )); do sleep 2; done Innerhalb der for-Schleife vorschlagen. So würde in der for-Schleife solange ein neues wget in den Hintergrund geschickt bis 10 wgets laufen. Dann wird 2 Sekunden gewartet und erneut geschaut wieviele wgets noch laufen. In etwa so: for i in `cat blabblubb` do wget -b $i while ((` ps |grep wget |wc -l` < 10 )) do sleep 2 done done mfg Axel
Hallo, Am Tue, 13 Apr 2004, Axel Heinrici schrieb:
In etwa so: for i in `cat blabblubb` do wget -b $i while ((` ps |grep wget |wc -l` < 10 )) do sleep 2 done done
while read url; do wget -b "$url" ## quoten ist gerade bei URLs wichtig while test `ps ax | grep -c '[w]get '` -ge 10; do sleep 2; ^^ ^ ^ done done -dnh -- If you haven't got time to RTFM, you haven't got time to whine on this mailing list.
Vielen vielen Dank nochmal für eure Mühe... ich bin eigentlich mit meiner (nicht so eleganten) Lösung auch recht zufrieden, das hier ist aber besser #!/bin/sh while read url; do wget -b "$url" ## quoten ist gerade bei URLs wichtig while test `ps ax | grep -c '[w]get '` -ge 10; do sleep 2; done done ich verstehe auch irgendwie gerade nicht, warum das hier bei mir nicht funktioniert: ./test: line 2: syntax error near unexpected token `do' ./test: line 2: ` while read url ; do' irgendwas muss an der Zeile noch falsch sein. Ich sehe es nur nicht, was da falsch sein soll... Naja, ich schaue mir das morgen bei tageslich nochmal an. vielen Dank nochmal Gruß Sören
Hallo, Am Tue, 13 Apr 2004, Soeren Wengerowsky schrieb:
Vielen vielen Dank nochmal für eure Mühe... ich bin eigentlich mit meiner (nicht so eleganten) Lösung auch recht zufrieden, das hier ist aber besser
#!/bin/sh
while read url; do wget -b "$url" ## quoten ist gerade bei URLs wichtig while test `ps ax | grep -c '[w]get '` -ge 10; do sleep 2; done done
*urgsl* da fehlt natuerlich noch die Eingabe: while read url; do # machwas mit $url done < URLLISTE Einen Vertipper, der den Fehler verursachen koennte seh ich grad nicht. Was ist /bin/sh denn bei dir? Ein symlink auf die bash? -dnh -- If you haven't got time to RTFM, you haven't got time to whine on this mailing list.
Am Dienstag, 13. April 2004 15:10 schrieb Axel Heinrici:
Wenn dann eher for i in `cat blabblubb`; do wget -b $i ; done Und auch das, würde ich zur Übersicht in ein Skript schreiben. Klar.. ich tipp das doch nicht immer ein ;-)
Ich weiß jetzt nicht genau was ram-Dateien sind. Da sind in meinem Fall die links für http-gespeicherte rm-dateien drin. Das sind diese Real-audio-streams... die will ich halt auf die Platte packen. Obiges funktioniert nur, wenn in blabblubb nur die links stehen. Wenn da noch einige Zeilen sonstiger Kram drinstehen, dann verstopft dein System nur mit wget-tasks die früher oder später irgendeinen Fehler produzieren. Gut... ist auch so
Selbst wenn in der Datei nur links stehen kann das zur Überlastung des Systems führen. Die von dir vorgeschlagene Begrenzung auf 10 wget-Instanzen fehlt noch. xargs -n 10 hilft auch nicht wirklich (Ich fürchte David hat dich nicht richtig verstnden). Das würde nur ein wget mit maximal 10 URLs starten. Da müsste man wohl wget -n [Anzahl_links/10] --max-procs=0 arbeiten. Aber dann ist da wieder das Problem mit der möglicherweise hohen Anzahl von wget-Instanzen und der daraus resultierenden Systemlast.
Gute Idee
Ohne es getestet zu haben würde ich ein while ((` ps |grep wget |wc -l` < 10 )); do sleep 2; done Innerhalb der for-Schleife vorschlagen. So würde in der for-Schleife solange ein neues wget in den Hintergrund geschickt bis 10 wgets laufen. Dann wird 2 Sekunden gewartet und erneut geschaut wieviele wgets noch laufen.
super.. an sowas hab ich mich noch nicht herangetraut.. deswegen hatte ich die Dateien ja auch zerpflückt.. So ist es aber besser.
In etwa so: for i in `cat blabblubb` do wget -b $i while ((` ps |grep wget |wc -l` < 10 )) do sleep 2 done done
Vielen vielen Dank. Das funktioniert zwar so noch nicht ganz ( ./test: line 4: syntax error near unexpected token ` ' ./test: line 4: ` do wget -b $i ' ) Aber jetzt habe ich schonmal einen sehr guten Anhaltspunkt für weiteres Herumprobieren. Gruß Sören
participants (3)
-
Axel Heinrici
-
David Haller
-
Soeren Wengerowsky