96

我正在使用 Wget 通过 cron 运行 PHP 脚本,使用以下命令:

wget -O - -q -t 1 http://www.example.com/cron/run

该脚本最多需要 5-6 分钟来完成处理。WGet 会等待它并给它所需的所有时间,还是会超时?

4

5 回答 5

161

根据wget 的手册页,有几个与超时相关的选项——默认读取超时为 900 秒——所以我说,是的,它可能会超时。


以下是有问题的选项:

-T seconds
--timeout=seconds

将网络超时设置为 seconds 秒。这相当于同时指定--dns-timeout, --connect-timeout--read-timeout, 。


对于这三个选项:

--dns-timeout=seconds

将 DNS 查找超时设置为 seconds 秒。
未在指定时间内完成的 DNS 查找将失败。
默认情况下,DNS 查找没有超时,除了系统库实现的超时。

--connect-timeout=seconds

将连接超时设置为 seconds 秒。
需要较长时间建立的 TCP 连接将被中止。
默认情况下,除了系统库实现的连接超时之外,没有连接超时。

--read-timeout=seconds

将读取(和写入)超时设置为 seconds 秒。
此超时的“时间”是指空闲时间:如果在下载的任何时间点,超过指定的秒数没有接收到数据,则读取失败并重新开始下载。
此选项不会直接影响整个下载的持续时间。


我想使用类似的东西

wget -O - -q -t 1 --timeout=600 http://www.example.com/cron/run

应确保在超过脚本持续时间之前没有超时。

(是的,这可能是最残酷的解决方案^^)

于 2010-02-18T19:26:12.630 回答
39

默认超时为 900 秒。您可以指定不同的超时时间。

-T seconds
--timeout=seconds

默认为重试 20 次。您可以指定不同的尝试。

-t number
--tries=number

链接:wget man 文档

于 2010-02-18T19:26:11.760 回答
8

在 1.14 版本之前,如果通过 https 下载,由于存在错误,不遵守 wget 超时参数。

于 2014-08-14T06:54:28.713 回答
7

因为在您的问题中您说它是一个 PHP 脚本,所以最好的解决方案可能是简单地添加您的脚本:

ignore_user_abort(TRUE);

这样,即使wget终止,PHP 脚本也会继续处理,至少直到它不超过max_execution_time限制(ini 指令:默认为 30 秒)。

根据wgetanyay 你不应该改变它的超时,根据 UNIX 手册 默认 wget 超时是 900 秒(15 分钟),这比你需要的 5-6 分钟要大得多。

于 2012-12-19T15:57:46.470 回答
2

wget 超时值都与下载文件所需的时间无关。

如果您触发的 PHP 脚本在那里闲置了 5 分钟并且没有返回任何数据,--read-timeout如果它设置为小于执行脚本所需的时间,wget 将触发。

如果您实际上正在下载文件,或者如果 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 秒后超时,然后重试(如果--triesaka-t大于 1)。

例如,这里我从 NVIDIA 下载一个需要 4 分钟下载的文件,并且我将 wget 的超时值设置为 10 秒:

$ 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。

于 2021-07-02T23:50:43.900 回答