我正在使用 Wget 通过 cron 运行 PHP 脚本,使用以下命令:
wget -O - -q -t 1 http://www.example.com/cron/run
该脚本最多需要 5-6 分钟来完成处理。WGet 会等待它并给它所需的所有时间,还是会超时?
根据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
应确保在超过脚本持续时间之前没有超时。
(是的,这可能是最残酷的解决方案^^)
默认超时为 900 秒。您可以指定不同的超时时间。
-T seconds
--timeout=seconds
默认为重试 20 次。您可以指定不同的尝试。
-t number
--tries=number
链接:wget man 文档
在 1.14 版本之前,如果通过 https 下载,由于存在错误,不遵守 wget 超时参数。
因为在您的问题中您说它是一个 PHP 脚本,所以最好的解决方案可能是简单地添加您的脚本:
ignore_user_abort(TRUE);
这样,即使wget
终止,PHP 脚本也会继续处理,至少直到它不超过max_execution_time
限制(ini 指令:默认为 30 秒)。
根据wget
anyay 你不应该改变它的超时,根据 UNIX 手册 默认 wget 超时是 900 秒(15 分钟),这比你需要的 5-6 分钟要大得多。
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 秒后超时,然后重试(如果--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、连接和读取是一个好主意。如果您将其保留为默认值 900s,那么每次 DNS 或 Internet 连接出现问题时,您将等待 15m。