0

(私たちのサーバーは Linux ベースです)

私は経験豊富な PHP 開発者ですが、常に実行してデータを取得するボットを初めて開発します。

簡単な (そしてサンプルの) シナリオでアプリケーションを説明します。私は約 2000 の Web サイト URL を持っており、私のアプリケーションはこの URL にアクセスし、Web ページの内容を記録します。このアプリケーションは、7 日 24 時間動作します。2000 の Web サイトが終了すると、再び機能し始めます。

しかし、私のサーバーにはいくつかの提案が必要です。ご覧のとおり、サーバーをシャットダウンするまで、アプリケーションは無限に実行されます。私はこれでこの無限ループを行うことができます:

while(true)
{
     APPLICATION CODES HERE
}

しかし、これはサーバーにとって悪になると思います:)サーバー側でこのようなことをすることは可能ですか?

また、cronjobsを使用すると思いますが、私のシナリオでは機能しません。私のスクリプトはすぐに再び動作を開始するため、動作が終了します。「 30分ごとに始める」のではなく、「あなたが仕事を終えたらまた始める」必要があります。わからないので、おそらく 2000 の Web サイトすべてを取得するのに 30 分以上かかるか、30 分未満かかるでしょう。

うまく説明できたと思います。

また、メモリ使用量も気になります。ご存知のように、ガベージ コレクターは、PHP スクリプトが停止するたびにメモリをクリーンアップします。しかし、私が言ったように、私のアプリは数日 (おそらく数週間) 停止しません。したがって、ガベージ コレクターはトリガーされません。スクリプトの最後で使用されているすべての変数を手動で設定解除しています ( unset() function )。それは十分ですか?

サーバー管理者からの提案が必要です:)

PS。Web アプリケーションではなく、コンソール アプリケーションとして開発しています。コマンドラインから実行できます。

4

2 に答える 2

0

スクリプトは、リストを 1 回だけ実行して終了することができます。そうすれば、php が保持しているすべてのリソースを解放できます。

次に、無限ループで php スクリプトを呼び出すシェル スクリプトを作成します。

PHP は長時間実行されるタスク用に設計されていないため、ガベージ コレクションがタスクに対応しているかどうかはわかりません。毎回実行後に終了すると、強制的にすべてが解放されます。

于 2013-04-01T00:59:56.850 に答える
0

バッチ処理..すべてのサイトをcsvなどに保存し、完了後にそれらをマークし、マークされていないすべてのサイトで作業し、次にマークされたすべてで作業します..など.一度に1つまたは5つだけ言って、開始しますcronから毎分バッチスクリプト..

それらすべてを一度に処理しようとしないでください..エラーが発生すると、何が起こったのかわかりません..

ジョブをデータベースに保存したり、処理統計などを保存したりすることもできます.微調整とより良いレポートが可能になります。

コマンド ラインからでも、無限の php スクリプトを実行しようとすると、おそらく制限時間に達するでしょう。サーバー管理者もあなたを嫌うでしょう。リソースを適切に解放しないと、メモリの制限に達する可能性があります。PHP で簡単に実行できます。

読む: http://www.ibm.com/developerworks/opensource/library/os-php-batch/

于 2013-03-31T20:41:44.300 に答える