我有一个使用{3}设备上运行的wget
的bash脚本。我希望脚本暂停,直到我得到响应,所以我设置了我的代码:
wget -t 0 -T 15 --retry-connrefused www.example.com
问题在于,当根本没有连接时(3g下降几秒钟),DNS无法解析主机,wget
会停止重试。
有没有办法强制重试,直到连接恢复?我知道我可以写一个循环,但我想知道wget
中是否有我可以使用的设置。如果没有什么最好的变量来构建循环?
更多详情:
根据我写的代码,wget
将重试但如果设备根本没有互联网连接(例如我从设备中拔出3g加密狗),它将停止重试,告诉我它可以'解析主机地址。它在-T 15
wget: unable to resolve host address
答案 0 :(得分:9)
这个循环应该这样做:
while true;do
wget -T 15 -c http://example.com && break
done
<小时/> 工作原理:
while loop
将不会中断,它将连续运行wget
命令并保持打印错误消息。wget
就会开始解析主机并获取文件。0
或inf
,即无限次重试,使用限制值)wget
将重试获取文件,直到达到超时15秒。 15秒后,wget
命令将失败并打印错误输出,因此while loop
不会中断。因此,它将再次进入没有连接的状态,并保持打印错误消息。wget
就会开始解析主机并获取文件。只要文件未完全下载,这些步骤(1-4)就会继续。wget
命令使用-c
选项,即resume选项。因此wget
的每个实例都将从它停止的位置开始(下载)。wget
命令成功时,循环将中断。答案 1 :(得分:1)
以下是可用于解决问题的脚本
FILENAME=$1
DOWNURL=$2
wget -O "`echo $FILENAME`" "`echo $DOWNURL`"
FILESIZE=$(stat -c%s "$FILENAME")
while [ $FILESIZE \< 1000 ]; do
sleep 3
wget -O "`echo $FILENAME`" "`echo $DOWNURL`"
FILESIZE=$(stat -c%s "$FILENAME")
done
脚本强制下载继续,直到完成。可以更改1000
以适合您正在下载的任何大小的文件。
答案 2 :(得分:0)
我不会使用循环。您最终可能会有多次下载。而是发明更智能的方法来检查网络连接。尝试事先ping一些网站,只有在成功时才发出wget。如果它们失败,脚本可以等待并再次尝试测试。 Ping可以进行安静测试,并使用计数和截止日期返回。