wget rosca - recursos minimalizing
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.
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.