Gewinde wget - Minimalisierung Ressourcen
Frage
Ich habe ein Skript, das die GeoIP Positionen verschiedenen ips wird immer, dies täglich ausgeführt wird, und ich werde erwarten, um ~ 50.000 ips zu haben, zu suchen.
Ich habe ein GeoIP-System eingerichtet. - Ich würde nur wget 50.000 Mal pro Bericht ausgeführt werden soll, die beseitigen möge
Was ich dachte, es muss eine Möglichkeit geben, wget eine Verbindung mit der URL öffnen müssen -. Dann den ips passiert, auf diese Weise nicht die Verbindung wieder herzustellen hat
Jede Hilfe wird sehr geschätzt werden.
Lösung
Wenn Sie wget
mehrere Adressen auf einmal geben, mit aufeinander folgenden Adressen, die zu dem gleichen HTTP / 1.1 (Connection: keep-alive
) unterstützenden Server, wget
wird die bereits bestehende Verbindung wieder verwenden.
Wenn es zu viele Adressen sind auf der Kommandozeile zur Liste, können Sie sie in eine Datei schreiben kann, und verwenden Sie die -i
/ --input-file=
Option (und pro UNIX Tradition, -i-
/ --input-file=-
liest die Standardeingabe).
Es gibt jedoch keine Möglichkeit, eine Verbindung zwischen verschiedenen wget
Anrufungen zu erhalten.
Andere Tipps
Sie können auch ein Gewinde Ruby-Skript schreiben auf mehrere Eingabe wget Dateien auszuführen, gleichzeitig den Prozess zu beschleunigen. Also, wenn Sie 5-Dateien haben 10.000 Adressen jeweils, können Sie dieses Skript verwenden:
#!/usr/bin/ruby
threads = []
for file in ARGV
threads << Thread.new(file) do |filename|
system("wget -i #{filename}")
end
end
threads.each { |thrd| thrd.join }
Jedes dieser Themen würde eine Verbindung verwenden, um alle Adressen in einer Datei zum Download bereit. Mit dem folgenden Befehl dann bedeutet nur 5 Verbindungen zum Server alle 50.000 Dateien zum Download bereit.
./fetch.rb "list1.txt" "list2.txt" "list3.txt" "list4.txt" "list5.txt"
Sie können auch ein kleines Programm (in Java oder C oder was auch immer) schreiben, das sendet die Liste der Dateien als POST-Anforderung und der Server gibt ein Objekt mit Daten über sie. Sollte auch nicht zu langsam sein.