8

ディレクトリをチェックし、15 秒以内に変更されていないファイルを削除する PHP スクリプトがあります (これはゲーム用です)。

私の問題は、このスクリプトを常に実行する方法です。10 分ごとに実行するように cron ジョブを設定すると、PHP スクリプトで sleep(10) を伴う無限ループが発生します。私の考えでは、コードは 10 秒ごとに実行され、スクリプトが停止した場合は、最終的に cron ジョブが再起動するというものでした。

ただし、スクリプトが開始されると、約 3 ループ (30 秒) 実行されてから停止します。PHP は、ファイルの読み込みごとに非常に多くのメモリしか取得できないと聞いたことがあります。

この PHP スクリプトを無期限にループさせるにはどうすればよいですか? 自分自身を呼び出す方法があるかもしれません

4

6 に答える 6

5

間隔を置いてクライアントをフォークする親phpプロセスを実行できます。オプションとしてそれを探索することに興味がある場合は、ここから始めるのが良いでしょう:http : //ca2.php.net/pcntlこの方法でそれを行うことの良いところは、親プロセスが内で終わらないクライアントpidを殺すことができるということです妥当な時間。

速くて汚いものを探しているなら、phpを非常に簡単に呼び出すためのbashスクリプトを書くことができます(Linuxを使用している場合):

#!/bin/bash
while [ "true" ]; do
        /path/to/script.php
        sleep 15
done

編集 あなたは本当にスクリプトさえ必要としません、bashはそれをすべて1行で行います:

while [ "true" ]; do /path/to/script.php; sleep 15; done
于 2009-07-13T21:20:00.893 に答える
2

php.ini ファイルの max_execution_time パラメータを確認してください。デフォルトは 30 秒だと思います。cron でセットアップする方法では、スクリプトにロジックを追加してそれ自体のインスタンスがまだ実行されていないことを確認しない限り、10 分後にスクリプトの複数のインスタンスが実行される可能性があります。

于 2009-07-13T20:49:47.600 に答える
2

PHP 実行可能ファイルが、CGI 実行可能ファイルではなく、コマンドライン インタープリターとして使用できるようにコンパイルされていることを確認してください。PHP は通常max_execution_time(デフォルトは 30 秒) より長く実行されるスクリプトを強制終了します。ただし、CLI 実行可能ファイルにはこの制限はありません。

CLI と CGI SAPI の詳細。

--version次の引数を使用して、実行可能ファイルの SAPI を確認できます。

$ php --version
PHP 4.3.0 (cli), Copyright (c) 1997-2002 The PHP Group
Zend Engine v1.3.0, Copyright (c) 1998-2002 Zend Technologies
于 2009-07-13T20:50:44.650 に答える
1

言語としての PHP は、無期限に実行するのはあまり得意ではありません。10 分ごとに cron ジョブがあるので、タスクを 60 回実行してから終了してみませんか?

また、ほとんどの Linux サーバーでは、PHP には CLI 用と Apache モード用に異なる構成ファイルがあります。そのため、etc/php/cli/php.ini を確認して、最大実行時間とメモリ制限を確認することをお勧めします。

于 2009-07-13T20:49:49.410 に答える
0

頻繁に (メモリが不足する前に) ループから抜け出し、それ自体を再実行します exec("/usr/bin/php " . FILE );

于 2009-07-13T20:53:11.587 に答える