Shell 线程化wget-最小化资源
我有一个脚本,可以获取各种IP的GeoIP位置,它每天都在运行,我预计大约有50000个IP需要查找 我已经建立了一个GeoIP系统-我只想消除每个报告运行wget 50000次的情况 我想的是,一定有办法让wget打开与url的连接,然后传递IP,这样就不必重新建立连接Shell 线程化wget-最小化资源,shell,wget,Shell,Wget,我有一个脚本,可以获取各种IP的GeoIP位置,它每天都在运行,我预计大约有50000个IP需要查找 我已经建立了一个GeoIP系统-我只想消除每个报告运行wget 50000次的情况 我想的是,一定有办法让wget打开与url的连接,然后传递IP,这样就不必重新建立连接 任何帮助都将不胜感激。如果您同时提供wget多个地址,且连续地址属于同一个HTTP/1.1(连接:保持活动状态)支持服务器,wget将重新使用已建立的连接 如果有太多的地址要在命令行上列出,您可以将它们写入一个文件并使用-i/
任何帮助都将不胜感激。如果您同时提供
wget
多个地址,且连续地址属于同一个HTTP/1.1(连接:保持活动状态
)支持服务器,wget
将重新使用已建立的连接
如果有太多的地址要在命令行上列出,您可以将它们写入一个文件并使用-i
/--input file=
选项(并且,按照UNIX的传统,-i-
/--input file=-
读取标准输入)
但是,无法在不同的
wget
调用之间保持连接。您还可以编写一个线程化的Ruby脚本,在多个输入文件上同时运行wget,以加快进程。因此,如果您有5个文件,每个文件包含10000个地址,则可以使用以下脚本:
#!/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 }
您还可以编写一个小程序(用Java或C或其他语言),将文件列表作为POST请求发送,服务器返回一个包含文件数据的对象。也不应该太慢。嗯,一次只有5个连接,但您总共建立了50000个连接。不知道您可以“接受”答案。我想这只是复选框?
./fetch.rb "list1.txt" "list2.txt" "list3.txt" "list4.txt" "list5.txt"