Wget Hanging,脚本停止

时间:2013-12-13 21:32:09

标签: http httprequest wget xargs

晚上,

我使用xargs

运行了很多wget命令
cat urls.txt | xargs -n 1 -P 10 wget -q -t 2 --timeout 10 --dns-timeout 10 --connect-timeout 10 --read-timeout 20

但是,一旦解析了文件,一些wget实例就会挂起。我仍然可以在系统监视器中看到它们,它们大约需要2分钟才能完成。

无论如何,我可以指定实例应在10秒后被杀死吗?我可以重新下载以后失败的所有网址。

在系统监视器中,wget实例在挂起时显示为sk_wait_data。 xargs有'do_wait',但是wget似乎是问题,因为一旦我杀了它们,我的脚本就会继续。

2 个答案:

答案 0 :(得分:2)

我相信应该这样做:

wget -v -t 2 --timeout 10

根据文件:

  • - timeout:将网络超时设置为秒秒。这相当于指定 --dns-timeout, - connect-timeout和--read-timeout,所有这些都在同一时间。

检查详细输出,看看它正在做什么。

此外,您可以尝试:

timeout 10  wget -v -t 2

或者你可以做内部超时:

( cmdpid=$BASHPID; (sleep 10; kill $cmdpid) & exec wget -v -t 2 )

(见:BASH FAQ entry #68: "How do I run a command, and have it abort (timeout) after N seconds?"

答案 1 :(得分:1)

GNU Parallel可以并行下载,并在超时后重试该过程:

cat urls.txt | parallel -j10 --timeout 10 --retries 3 wget -q -t 2 

如果获取网址的时间发生了变化(例如,由于互联网连接速度加快),则可以让GNU Parallel计算超时时间:

cat urls.txt | parallel -j10 --timeout 1000% --retries 3 wget -q -t 2 

这将使GNU Parallel记录成功作业的中值时间,并将超时动态设置为该时间的10倍。