WGET 是不是超时?
Posted
技术标签:
【中文标题】WGET 是不是超时?【英文标题】:Does WGET timeout?WGET 是否超时? 【发布时间】:2011-01-18 11:46:20 【问题描述】:我正在使用 Wget 通过 cron 运行 php 脚本,使用以下命令:
wget -O - -q -t 1 http://www.example.com/cron/run
脚本最多需要 5-6 分钟来处理。 WGet 会等待它并给它所需的所有时间,还是会超时?
【问题讨论】:
【参考方案1】:默认超时为 900 秒。您可以指定不同的超时时间。
-T seconds
--timeout=seconds
默认为重试 20 次。您可以指定不同的尝试。
-t number
--tries=number
链接:wget man document
【讨论】:
【参考方案2】:根据the man page of wget,有几个与超时相关的选项——默认读取超时为 900 秒——所以我说,是的,它可能会超时。
以下是有问题的选项:
-T seconds
--timeout=seconds
将网络超时设置为秒 秒。这相当于 指定
--dns-timeout
,--connect-timeout
,和--read-timeout
,都一样 时间。
对于这三个选项:
--dns-timeout=seconds
将 DNS 查找超时设置为秒 秒。 不支持的 DNS 查找 在规定时间内完成 将失败。 默认情况下,没有 DNS 查找超时,除了 由系统库实现。
--connect-timeout=seconds
将连接超时设置为秒 秒。 TCP 连接 再建立就会中止。 默认情况下,没有连接 超时,除了实施的 通过系统库。
--read-timeout=seconds
将读取(和写入)超时设置为 秒秒。 “时间” 此超时指的是空闲时间:如果, 在下载的任何时候,没有数据 收到超过 指定的秒数,读数 失败并重新开始下载。 此选项不直接 影响整个持续时间 下载。
我想使用类似
wget -O - -q -t 1 --timeout=600 http://www.example.com/cron/run
应确保在超过脚本持续时间之前没有超时。
(是的,这可能是最残酷的解决方案^^)
【讨论】:
如果我设置 -t 0 会无限期等待吗?-t
选项似乎是--tries
的别名,它将重试次数设置为number。 ;;;它似乎与任何类型的超时无关,而是与 wget 在出现错误时重新尝试下载的次数有关——而且您可能不希望将超时视为错误,并且脚本被重新调用。
--timeout=0 将禁用超时
我可能是这个星球上的那个,但对于 ubuntu 16 wget 只是忽略了 --timeout
的值。可能是因为我在命令中使用了基本身份验证【参考方案3】:
因为在你的问题中你说它是一个 PHP 脚本,也许最好的解决方案是简单地添加你的脚本:
ignore_user_abort(TRUE);
这样,即使wget
终止,PHP 脚本也会继续处理,至少直到它不超过max_execution_time
限制(ini 指令:默认为 30 秒)。
根据wget
anyay,你不应该改变它的超时,according to the UNIX manual默认的 wget 超时是 900 秒(15 分钟),这比你需要的 5-6 分钟大得多.
【讨论】:
【参考方案4】:在 1.14 版之前,如果由于 bug 而通过 https 下载,则不遵守 wget 超时参数。
【讨论】:
该死! CentOS 6 附带 wget 1.12,我在 https 链接上遇到了同样的问题 我遇到了完全相同的错误! Wget 在证书过期的 https 链接处停止! 我有一个带有 wget 版本 1.20.3 的 Linux,它也忽略“-T x”并且永远不会在错误的 IP 上终止,这就是我使用“超时”命令的原因:“ timeout 5 wget ..." 在我的情况下完美运行。【参考方案5】:wget 超时值与下载文件所需的时间无关。
如果您触发的 PHP 脚本在那里闲置 5 分钟并且没有返回数据,如果 wget 的 --read-timeout
设置为小于执行脚本所需的时间,则会触发。
如果您实际上是在下载文件,或者如果 PHP 脚本发回一些数据,例如 ... 进度指示器,那么只要脚本正在执行某项操作,就不会触发读取超时。
wget --help
告诉你:
-T, --timeout=SECONDS set all timeout values to SECONDS
--dns-timeout=SECS set the DNS lookup timeout to SECS
--connect-timeout=SECS set the connect timeout to SECS
--read-timeout=SECS set the read timeout to SECS
因此,如果您使用--timeout=10
,它会将 DNS 查找、连接和读取字节的超时设置为 10 秒。
下载文件时,您可以将超时值设置得非常低,只要您与要连接的站点有良好的连接,您仍然可以在 5 分钟内下载一个大文件,超时时间为 10 秒。如果您与站点或 DNS 的临时连接失败,则传输将在 10 秒后超时,然后重试(如果 --tries
aka -t
大于 1)。
例如,这里我从 NVIDIA 下载一个需要 4 分钟下载的文件,并且我将 wget 的超时值设置为 10s:
$ time wget --timeout=10 --tries=1 https://developer.download.nvidia.com/compute/cuda/11.2.2/local_installers/cuda_11.2.2_460.32.03_linux.run
--2021-07-02 16:39:21-- https://developer.download.nvidia.com/compute/cuda/11.2.2/local_installers/cuda_11.2.2_460.32.03_linux.run
Resolving developer.download.nvidia.com (developer.download.nvidia.com)... 152.195.19.142
Connecting to developer.download.nvidia.com (developer.download.nvidia.com)|152.195.19.142|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3057439068 (2.8G) [application/octet-stream]
Saving to: ‘cuda_11.2.2_460.32.03_linux.run.1’
cuda_11.2.2_460.32.03_linux.run.1 100%[==================================================================================>] 2.85G 12.5MB/s in 4m 0s
2021-07-02 16:43:21 (12.1 MB/s) - ‘cuda_11.2.2_460.32.03_linux.run.1’ saved [3057439068/3057439068]
real 4m0.202s
user 0m5.180s
sys 0m16.253s
4m下载,超时10s,一切正常。
一般来说,使用低值超时 DNS、连接和读取是个好主意。如果您将其保留为默认值 900s,那么每次 DNS 或 Internet 连接出现问题时,您将等待 15m。
【讨论】:
以上是关于WGET 是不是超时?的主要内容,如果未能解决你的问题,请参考以下文章