3

非常に長いphpスクリプトを実行する必要があります(4時間半、5時間)。

スクリプトは正常に実行されることもありますが、不可解に強制終了されることもあります(共有ホスティングと関係があるのでしょうか??)。

スクリプトを実行するための解決策は、おそらく小さなチャンクだと思います。

これを行うために、位置を移動する前に、そのステータスと位置をxmlファイルに格納し、スクリプトの1つのチャンクを実行するスクリプトを作成しました。

スクリプトの最後のビットを接続する際に問題が発生しました。これにより、現在のプロセスが終了し、スクリプトが再実行されます。

または多分私は間違った木を完全に吠えています!

私はSOや他の場所で見つけることができるものを読み通しましたが、それでも私は賢明ではありません:(

助けてください!!!

ダン

4

5 に答える 5

2

永続的に実行されてもデータの不整合が発生しないスクリプトがあることを考えると、cronjob を使用できます。

問題は、おそらくスクリプトを 2 回開始したくないため、スクリプトがまだ実行されているかどうかを知る必要があることです。私が心に留めている2つの解決策は、スクリプトのプロセスID(getmypid())またはタイムスタンプを使用することです。

PID の場合:

  • スクリプトの起動時に PID を保存 (/tmp/script_pid に)
  • 1 分ごとに cronjob をトリガーします。保存された PID でアクティブなプロセスを検索し、見つからない場合は開始します。

php の exec() (およびその仲間) と、Linux の「ps」などのコマンド ライン ツールにアクセスする必要があります。

タイムスタンプの場合:

  • 反復ごとにタイムスタンプを保存します。
  • 1 分ごとに cronjob をトリガーします。タイムスタンプが X より古い場合、新しいプロセスを開始します。

X が自分自身であるべき長さを把握する必要があります。

于 2010-04-17T13:53:10.640 に答える
1

PHPは、長いスクリプトを実行するために選択される言語ではありません。これをブラウザで実行していると思いますか?SSH経由でログインし、。を使用してスクリプトを実行してみてくださいphp /path/to/script.php

これがローカルで実行できるものである場合は、基本的なApache/PHPインストールをローカルマシンにインストールしてから実行できます。シェルアクセスがない場合はこれを使用します。

于 2010-04-17T13:20:31.797 に答える
1

可能であれば、長時間実行されるプロセスを独自のプロセスに分割しようとします。PHPスクリプトに計算を起動させてから、計算が終了する可能性のある手がかりを探します(現在の計算の進行状況を含む状態ファイルのようなもの)。次に、AJAXテクニックを使用して、ユーザーに素敵な小さなプログレスバーを提供することもできます;)

于 2010-04-17T13:25:13.687 に答える
1

このサーバーでcronにアクセスできる場合は、スクリプトを1分ごとに実行して、次のデータチャンクを処理できます。

于 2010-04-17T13:25:26.773 に答える
0

Josh に同意します。可能であれば、デスクトップ アプリケーションのような別の方法でこれをプログラムすることをお勧めします。PHP は、スクリプトを 4 ~ 5 時間実行する必要があるこのような目的のために構築されていません。これは、共有ホスティングで max_execution_time またはスクリプトが CPU を消費することは確実ですが、デスクトップ アプリまたは SSH に移行することをお勧めします。

于 2010-04-17T13:40:59.573 に答える