1つのサイトからWebスクレイピングを実行し、自分のWebサイトの入力を解析するPHPスクリプトを作成しました。
スクリプトは定期的にcronjobによって駆動され、すべてが共有Webサーバーでホストされます。
問題は、スクリプトが1日に数回終了し、エラーメッセージが表示されず、毎回コード内のランダムな場所で終了することです。
スクリプトは長く、他の国のWebサイトへの2つのHTTP取得と4つのHTTP投稿を実行します。各HTTP要求は、完了するまでに最大3秒かかります。また、MySqlデータベースとの間でファイルおよびr/wに書き込みます。
次のことを試した後、私はそれに固執しています:
1)私のホスティングサポート(IxWebHosting)と話します-彼らは私の時間を無駄にし、彼らの責任を否定し、cronjobを定期的に最大5分のレートに制限するようにアドバイスしました(3分間隔になる前ですが、何も変わりませんでした)。
2)cronjobコンテキストから実行する代わりに、次の方法に切り替えました。Cronjobは、5分ごとに「ローダーPHPスクリプト」を呼び出します。b。「ローダーPHPスクリプト」は、HTTP Getを使用して実際のPHPスクリプトを呼び出し、応答を待つ前に終了します。c。実際のPHPスクリプトは、約20秒のジョブを実行します(ここで、プログラムはランダムな場所で終了します)。
3)プログラムが実行ごとに終了した場所を確認するために、コードの多くの場所にログファイルのタイムスタンプを書き込みます。これにより、プログラムがコードのどこでも終了することがわかりました。
4)それが私のコード障害ではないことを証明するために、私は次のテストを実行しました。Cronjobは、別のローダーPHPスクリプトを呼び出します。b。PHPスクリプトは、別のテスト目的のPHPスクリプトに対してHTTP要求を実行し、応答を待たずに終了します。c。2番目のPHPスクリプトは、ダミーの20秒タスクを実行します。1秒間スリープし、タイムスタンプをログファイルに20回書き込みます。
結果:テストは成功しました!2番目のプログラムは失敗しませんでした...つまり、コードと実行しているWebサーバーに関係がありますが、毎回別の場所で失敗し、1日に10回しか失敗しないためです(実行時の288回から) 1日)それから私はそれがどこにあるかわかりません(そしてPHPのエラーメッセージはありません)。
事前に感謝します。長い説明をお詫び申し上げます。リクエストに応じて詳細をお知らせします。