web-dev-qa-db-ja.com

WGETはタイムアウトしますか?

私はPHPスクリプトをWgetを使用してcron経由で次のコマンドで実行しています:

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

スクリプトの処理には、最大5〜6分かかります。 WGetはそれを待って、必要なすべての時間を与えますか、それともタイムアウトしますか?

72
Click Upvote

wgetのmanページ によると、タイムアウトに関連するオプションがいくつかあり、デフォルトの読み取りタイムアウトは900秒です-つまり、タイムアウトになる可能性があります。


問題のオプションは次のとおりです。

-T seconds
--timeout=seconds

ネットワークタイムアウトをseconds秒に設定します。これは、--dns-timeout--connect-timeout、および--read-timeoutをすべて同時に指定するのと同じです。


そしてこれらの3つのオプションの場合:

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

スクリプトの期間よりも長くなる前にタイムアウトがないことを確認する必要があります。

(ええ、それはおそらく最も残忍な解決策です^^)

131
Pascal MARTIN

デフォルトのタイムアウトは900秒です。異なるタイムアウトを指定できます。

-T seconds
--timeout=seconds

デフォルトでは、20回再試行します。異なる試行を指定できます。

-t number
--tries=number

リンク: wget man document

30
hIpPy

あなたの質問では、それはPHPスクリプトであると言ったので、おそらく最良の解決策は、単にスクリプトを追加することです。

ignore_user_abort(TRUE);

このようにして、wgetが終了した場合でも、PHPスクリプトは少なくともmax_execution_time制限を超えるまで処理され続けます(iniディレクティブ:デフォルトで30秒) )。

wgetごとに、タイムアウトを変更しないでください NIXマニュアルによるデフォルトのwgetタイムアウトは900秒(15分)、whisは必要な5-6分よりもはるかに大きいです。

6
Marco Demaio

バージョン1.14より前では、 bug が原因でhttps経由でダウンロードする場合、wgetタイムアウト引数は順守されませんでした。

5
Dean Rather