2017-11-21 3 views
0

私は1mioをこすったPHPスクリプトを作成しました。コンテンツを分析します。私はそれをローカルでテストし、1,000個のドメインにつき20分を削った。PHPスクリプトの実行時間は2週間かかりますか?

サーバをセットアップして2週間稼働させることができますか、特定の実行時間後にPHPファイルがクラッシュする理由はありますか?

+0

これは問題ありません。メモリリークがないと仮定します。 – exussum

+0

必要がある場合は、各ドメインでの実行が部分的な方法で開始する方が良いでしょうが、彼は各ドメインに対してこのスクリプトを単純に実行しなかったことを決して暗示しませんでした。彼はちょうど20分間に1000のドメインを行うことができると言った。あなたはphp.iniを設定しても無限になるように設定することができるメモリのオーバーフローを防ぐ以外に、実際にはあまり効果がありません。だから本当に問題はないでしょう。特定のポイントからスクリプトを初期化する方法があることを確認する必要があります。なぜなら、スクリプトの途中でクラッシュし、50,000のサイトを削った場合、簡単にできるようになるからです#50,001で開始します。 – cchoe1

答えて

2

コンソールからPHPを実行すると、実行時間が最大になりません。つまり、実行に2週間かかる場合は、おそらくあなたの考えを再構築するべきです。たぶん私は次のことを示唆している...

+0

なぜこの単純なスクリプトをフロントエンドでラップしたいのですか?彼は、クラッシュした場合に中断した場所から再開できるように、特定のポイントからスクリプトを開始できることを確認するだけです。これは、いくつかのウェブサイトを掻き集める単純なスクリプトにすぎず、一度に5回を行うのに対して、1回の繰り返しを行うことは、おそらく終了までにどれくらいの時間がかかるかに影響しないだろう。 – cchoe1

+0

いいえ、実行時間が短くなるため、障害がより顕著になり、捕捉しやすくなります。 – catbadger

0

を一度に5つのまたは10のドメインを掻き取るPHPスクリプトを呼び出しjsのフロントエンドを持っています。

  1. 実行あたりのXドメインにスクリプトを制限します。
  2. 毎分スクリプトを実行するCRONを作成します。

このようにすれば、メモリリークについてあまり心配する必要はありません。プロセスの開始時に.lockファイルを作成して、終了前にCRONがスクリプトを実行しないようにすることもできます。時には、あなたは他のウェブサイトからの情報を要求しているとき、それは非常に長い時間がかかるかもしれません...

+0

また、各リクエストの間にあなたの遅延とアクションをランダム化することをお勧めしますか?サーバーには、一連の活動を検出するロジックがあり、IPアドレスの禁止を非常に簡単に行うことができます。 –

1

確かに、あなたは可能性がありますが、コマンドラインを介してコードを実行したり、それは私は非常にあなたのことをお勧めしますと言ったではmax_execution_time

を設定した場合このコードをLinuxボックスで実行している場合は、pThreadsを探してコードを再構築してください。 Windowsマシン上で実行している場合は、C#を使用する方が簡単です。

注:このタスクにスレッドを使用すると、はるかに速くなるということは十分に強調できません。

0

cronジョブの問題は、オーバーランに陥る可能性があり、複数のコピーが同時に実行されることです。一度に複数のコピーをCronから実行している場合は、負荷スパイクが大きくなりますが、毎分30秒間何も実行されていない可能性があります。 (私を信じて、私はそれが起こって見た、それはかなりではなかった)。

単純なシェルスクリプトは、通常のLinux起動メカニズムで簡単に実行できるように設定でき、永遠にループします。ここでは、ループを終了するPHPスクリプト(または何でも)の終了をチェックする機能を追加しました。意図的に実行を遅くするための他のチェックを追加します。件名はmy blogpostです。

私は、10-50のドメインスクレイプのどこかでスクリプトを実行し、終了して終了するまで、再度実行する準備が整うでしょう。

#!/bin/bash 

# a shell script that keeps looping until a specific exit code is given 
# Start from /etc/init.d, or SupervisorD, for example. 
# It will restart itself until the script it calls returns a given exit code 

nice php -q -f ./cli-worker.php -- [email protected] 
ERR=$? 

# if php does an `exit(99);` ... 
if [ $ERR -eq 99 ] 
then 
    # planned complete exit 
    echo "99: PLANNED_SHUTDOWN"; 
    exit 0; 
fi 

sleep 1 

# Call ourself, replacing the script without a sub-call 
exec $0 [email protected] 
関連する問題