【发布时间】:2012-06-02 10:06:31
【问题描述】:
我需要在 Linux 上下载超过 30k 的页面,我想我可以用一个简单的 bash 脚本 + wget 来做到这一点,这就是我想出的:
#!/bin/bash
start_time=$(date +%s)
for i in {1..30802}
do
echo "Downloading page http://www.domain.com/page:$i"
wget "http://www.domain.com/page:$i" -q -o /dev/null -b -O pages/$i
running=$(ps -ef | grep wget | wc -l)
while [ $running -gt 1000 ]
do
running=$(ps -ef | grep wget | wc -l)
echo "Current running $running process."
sleep 1;
done
done
while [ $running -gt 1 ]
do
running=$(ps -ef | grep wget | wc -l)
echo "Waiting for all the process to end..."
sleep 10;
done
finish_time=$(date +%s)
echo "Time duration: $((finish_time - start_time)) secs."
某些页面没有完全下载!
由于上面的代码会使1k wget并行运行进程和 等到它降低来添加更多的过程,可能是我 实际上用尽了所有可用的互联网链接?
我怎样才能使它更可靠以确保页面实际上是 是否正确下载?
编辑:
- 我听说 curl 是下载页面的更好选择是 真的吗?
【问题讨论】:
-
1k 并发连接可能有点过头了...而且您没有检查 wget 的返回码...
-
同意 Scottymac。如果你有 100 个并发连接,你有同样的问题吗?祝你好运。
-
@Scottymac,shellter 感谢您指出这一点我也同意我可能做得过火,但我需要它能够在 3 小时内获得所有页面,这就是我正在寻找的原因使用 bash 脚本 + Linux 上可用的任何东西进行优化的一种方法或某种可靠的方法。目前 1k 进程需要 2 小时 21 分钟。
标签: linux bash curl for-loop wget