Pergunta

Eu tenho um script que está recebendo os locais GeoIP de vários ips, este é executado diariamente e eu vou esperar para ter em torno de ~ 50.000 ips para olhar para cima.

Eu tenho um sistema GeoIP configurar -. Eu só gostaria de eliminar ter que executar wget 50.000 vezes por relatório

O que eu estava pensando é, deve haver alguma maneira de ter wget abrir uma conexão com a url -., Em seguida, passar os ips, dessa forma ele não tem que re-estabelecer a conexão

Qualquer ajuda será muito apreciada.

Foi útil?

Solução

Se você der wget vários endereços de uma só vez, com endereços consecutivos que pertencem ao mesmo HTTP / 1.1 (Connection: keep-alive) servidor de suporte, wget vai voltar a utilizar a ligação já estabelecida.

Se houver muitos endereços à lista na linha de comando, você pode gravá-los em um arquivo e usar a opção -i / --input-file= (e, por UNIX tradição, -i- / --input-file=- lê a entrada padrão).

Há, no entanto, nenhuma maneira de preservar uma conexão entre diferentes invocações wget.

Outras dicas

Você também pode escrever uma rosca de Ruby script para executar wget em vários arquivos de entrada simultaneamente para acelerar o processo. Então, se você tem 5 arquivos contendo 10.000 endereços de cada um, você pode 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 um destes tópicos usaria uma conexão para baixar todos os endereços em um arquivo. O comando a seguir, em seguida, significa apenas 5 conexões com o servidor para baixar todos os 50.000 arquivos.

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

Você também pode escrever um pequeno programa (em Java ou C ou qualquer outro) que envia a lista de arquivos como uma solicitação POST eo servidor retorna um objeto com dados sobre eles. Não deve ser muito lento mal.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top