質問

次のコマンドを使用して、WGETを使用してCronを介してPHPスクリプトを実行しています。

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

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

役に立ちましたか?

解決

によると WgetのManページ, 、タイムアウトに関連するいくつかのオプションがあります - そして、900のデフォルトの読み取りタイムアウトがあります - したがって、私はそれがタイムアウトできると言います。


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

-T seconds
--timeout=seconds

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


そして、これらの3つのオプションについて:

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

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

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

他のヒント

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

-T seconds
--timeout=seconds

デフォルトは20回再試行することです。さまざまなトライを指定できます。

-t number
--tries=number

リンク: Wget Man Document

あなたの質問の中であなたはそれがPHPスクリプトだと言ったので、おそらく最良の解決策はあなたのスクリプトを単に追加することかもしれません:

ignore_user_abort(TRUE);

このようにしても wget 終了すると、PHPスクリプトは少なくともそれを超えないまで処理され続けます max_execution_time 制限(INI指令:デフォルトで30秒)。

に従って wget Anyayあなたはそのタイムアウトを変更するべきではありません、 UNIXマニュアルによると デフォルトのWGETタイムアウトは900秒(15分)です, 、必要な5〜6分よりもはるかに大きいです。

バージョン1.14の前に、WGETタイムアウトの引数は、httpsを介してダウンロードしている場合に順守されませんでした バグ.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top