質問
次のコマンドを使用して、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を介してダウンロードしている場合に順守されませんでした バグ.