wget 强制重试直到有连接
wget force retry until there is a connection
我有一个 bash 脚本,它在 3g 设备上使用 wget
运行。我希望脚本暂停,直到我得到响应,所以我设置了我的代码:
wget -t 0 -T 15 --retry-connrefused www.example.com
问题是当根本没有连接时(3g 下降几秒钟)DNS 无法解析主机并且 wget
停止重试。
有没有办法在连接恢复之前强制重试?我知道我可以写一个循环,但我想知道 wget
中是否有我可以使用的设置。如果没有构建循环的最佳变量?
更多详情:
使用我编写的代码,wget
会重试,但如果设备根本没有互联网连接(例如,我从设备中拔出 3g 加密狗),它将停止重试,告诉我它可以' t 解析主机地址。它在 -T 15
定义的 15 秒后发送
wget: unable to resolve host address
我不会使用循环。您最终可能会进行多次下载。而是发明更智能的方法来检查网络连接。尝试预先 ping 一些站点,只有在成功时才发出 wget。如果他们失败了,脚本可以等待并再次尝试测试。 Ping 可以进行静默测试并使用 returns.
的计数和截止日期
这是一个可以用来解决问题的脚本
FILENAME=
DOWNURL=
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
可以更改以适合您正在下载的任何大小的文件。
这个循环应该这样做:
while true;do
wget -T 15 -c http://example.com && break
done
工作原理:
- 在没有网络连接的情况下,
while loop
不会中断,它会继续运行wget
命令并不断打印错误信息。
- 连接到 Internet 后,
wget
开始解析主机并获取文件。
- 现在,如果连接丢失或发生其他错误,
wget
的默认重试(不要使用 0
或 inf
即无限重试,使用有限的值)将重试获取文件,直到超时达到 15 秒。 15 秒后 wget
命令将失败并打印错误输出,因此 while loop
不会中断。所以它会再次进入没有连接等状态并继续打印错误消息。
- 再次连接或解决错误后,
wget
开始解析主机并获取文件。只要文件未完全下载,这些步骤 (1-4) 就会继续。
- 此
wget
命令使用-c
选项,即resume选项。因此 wget
的每个实例都将从它停止的地方开始(下载)。
- 当文件下载完成且
wget
命令成功时,循环将中断。
我有一个 bash 脚本,它在 3g 设备上使用 wget
运行。我希望脚本暂停,直到我得到响应,所以我设置了我的代码:
wget -t 0 -T 15 --retry-connrefused www.example.com
问题是当根本没有连接时(3g 下降几秒钟)DNS 无法解析主机并且 wget
停止重试。
有没有办法在连接恢复之前强制重试?我知道我可以写一个循环,但我想知道 wget
中是否有我可以使用的设置。如果没有构建循环的最佳变量?
更多详情:
使用我编写的代码,wget
会重试,但如果设备根本没有互联网连接(例如,我从设备中拔出 3g 加密狗),它将停止重试,告诉我它可以' t 解析主机地址。它在 -T 15
wget: unable to resolve host address
我不会使用循环。您最终可能会进行多次下载。而是发明更智能的方法来检查网络连接。尝试预先 ping 一些站点,只有在成功时才发出 wget。如果他们失败了,脚本可以等待并再次尝试测试。 Ping 可以进行静默测试并使用 returns.
的计数和截止日期这是一个可以用来解决问题的脚本
FILENAME=
DOWNURL=
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
可以更改以适合您正在下载的任何大小的文件。
这个循环应该这样做:
while true;do
wget -T 15 -c http://example.com && break
done
工作原理:
- 在没有网络连接的情况下,
while loop
不会中断,它会继续运行wget
命令并不断打印错误信息。 - 连接到 Internet 后,
wget
开始解析主机并获取文件。 - 现在,如果连接丢失或发生其他错误,
wget
的默认重试(不要使用0
或inf
即无限重试,使用有限的值)将重试获取文件,直到超时达到 15 秒。 15 秒后wget
命令将失败并打印错误输出,因此while loop
不会中断。所以它会再次进入没有连接等状态并继续打印错误消息。 - 再次连接或解决错误后,
wget
开始解析主机并获取文件。只要文件未完全下载,这些步骤 (1-4) 就会继续。 - 此
wget
命令使用-c
选项,即resume选项。因此wget
的每个实例都将从它停止的地方开始(下载)。 - 当文件下载完成且
wget
命令成功时,循环将中断。