私はPHPスクリプトをWgetを使用してcron経由で次のコマンドで実行しています:
wget -O - -q -t 1 http://www.example.com/cron/run
スクリプトの処理には、最大5〜6分かかります。 WGetはそれを待って、必要なすべての時間を与えますか、それともタイムアウトしますか?
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
スクリプトの期間よりも長くなる前にタイムアウトがないことを確認する必要があります。
(ええ、それはおそらく最も残忍な解決策です^^)
デフォルトのタイムアウトは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
ごとに、タイムアウトを変更しないでください NIXマニュアルによるデフォルトのwgetタイムアウトは900秒(15分)、whisは必要な5-6分よりもはるかに大きいです。
バージョン1.14より前では、 bug が原因でhttps経由でダウンロードする場合、wgetタイムアウト引数は順守されませんでした。