Pregunta

Tengo un script que está obteniendo las ubicaciones de GeoIP de varios ips, esto se ejecuta a diario y voy a esperar tener alrededor de ~ 50,000 ips para buscar.

Tengo un sistema GeoIP configurado, solo me gustaría eliminar tener que ejecutar wget 50,000 veces por informe.

Lo que estaba pensando es que debe haber alguna forma de que wget abra una conexión con la URL, luego pase los ips, de esa manera no tiene que restablecer la conexión.

Cualquier ayuda será muy apreciada.

¿Fue útil?

Solución

Si le da a wget varias direcciones a la vez, con direcciones consecutivas que pertenecen al mismo servidor de soporte HTTP / 1.1 ( Connection: keep-alive ), wget reutilizará la conexión ya establecida.

Si hay demasiadas direcciones para enumerar en la línea de comando, puede escribirlas en un archivo y usar la opción -i / --input-file = (y, según la tradición de UNIX, -i- / --input-file = - lee la entrada estándar).

Sin embargo, no hay forma de preservar una conexión a través de diferentes invocaciones de wget .

Otros consejos

También puede escribir una secuencia de comandos de Ruby para ejecutar wget en varios archivos de entrada simultáneamente para acelerar el proceso. Entonces, si tiene 5 archivos que contienen 10,000 direcciones cada uno, puede usar este 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 }

Cada uno de estos hilos usaría una conexión para descargar todas las direcciones en un archivo. El siguiente comando significa solo 5 conexiones al servidor para descargar los 50,000 archivos.

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

También puede escribir un pequeño programa (en Java o C o lo que sea) que envía la lista de archivos como una solicitud POST y el servidor devuelve un objeto con datos sobre ellos. Tampoco debería ser demasiado lento.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top