WGET超时吗?

时间:2010-02-18 19:21:32

标签: linux cron wget

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

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

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

5 个答案:

答案 0 :(得分:126)

根据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

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

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

答案 1 :(得分:26)

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

-T seconds
--timeout=seconds

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

-t number
--tries=number

link:wget man document

答案 2 :(得分:6)

因为在你的问题中你说它是一个PHP脚本,也许最好的解决方案就是简单地添加你的脚本:

ignore_user_abort(TRUE);

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

根据wget任意你不应该更改其超时,according to the UNIX manual 默认wget超时为900秒(15分钟),威尔要大于5-你需要6分钟。

答案 3 :(得分:5)

在版本1.14之前,如果由于bug而通过https下载,则不会遵守wget超时参数。

答案 4 :(得分:1)

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 的超时值设置为 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、连接和读取是一个好主意。如果您将其保留为默认值 900 秒,则每次 DNS 或 Internet 连接出现问题时,您将等待 15m。