Domanda

Ho uno script che sta ottenendo le posizioni GeoIP di vari ips, questo viene eseguito quotidianamente e mi aspetto di avere circa 50.000 ips da cercare.

Ho impostato un sistema GeoIP - Vorrei solo eliminare wget 50.000 volte per report.

Quello che stavo pensando è che ci deve essere un modo per fare in modo che wget apra una connessione con l'URL, quindi passa l'ip, in questo modo non deve ristabilire la connessione.

Qualsiasi aiuto sarà molto apprezzato.

È stato utile?

Soluzione

Se dai wget più indirizzi contemporaneamente, con indirizzi consecutivi appartenenti allo stesso HTTP / 1.1 ( Connection: keep-alive ) server di supporto, wget riutilizzerà la connessione già stabilita.

Se ci sono troppi indirizzi da elencare sulla riga di comando, puoi scriverli in un file e usare l'opzione -i / --input-file = (e, secondo la tradizione UNIX, -i- / --input-file = - legge l'input standard).

Non esiste, tuttavia, alcun modo per preservare una connessione tra diverse invocazioni wget .

Altri suggerimenti

Potresti anche scrivere uno script Ruby con thread per eseguire wget su più file di input contemporaneamente per accelerare il processo. Quindi, se hai 5 file contenenti 10.000 indirizzi ciascuno, puoi usare questo script:

#!/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 }

Ognuno di questi thread userebbe una connessione per scaricare tutti gli indirizzi in un file. Il seguente comando significa quindi solo 5 connessioni al server per scaricare tutti i 50.000 file.

./fetch.rb "list1.txt" "list2.txt" "list3.txt" "list4.txt" "list5.txt"

Potresti anche scrivere un piccolo programma (in Java o C o altro) che invia l'elenco di file come richiesta POST e il server restituisce un oggetto con i dati su di essi. Neanche dovrebbe essere troppo lento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top