3

私はこのexecコマンドを持っていますが、これは問題なく実行されますが、ブラウザーを解放しません(つまり、phpタイムアウトの問題がありますが、実際のコマンドは引き続き実行されます)。

exec("/usr/local/php53/bin/php csv.php $file $user > /dev/null");

実行するps auxwと、次の2つの実行中のプロセスが表示されます。

sh -c /usr/local/php53/bin/php csv.php /tmp/php9Pwu9e 294  >
/usr/local/php53/bin/php csv.php /tmp/php9Pwu9e 294

ただし、以下のコードを実行すると、ブラウザーはすぐに解放されますが、コマンドは実行を継続しません。

exec("/usr/local/php53/bin/php csv.php $file $user > /dev/null &");

ps auxw実行すると、16秒後に停止する実行中のプロセスが1つ表示されます(そして、メモリをすぐに使い果たし、CPU%を大量に使用しているようです)。

/usr/local/php53/bin/php csv.php /tmp/php9Pwu9e 294

その後、プロセスは実際には何もせずに終了します。これを引き起こすアンパサンドが何をしているのかわからない。

sh -cまた、最後にアンパサンドがないのになぜ表示されるのですか?これは何かを示しているのではないかと思いますが、何がわかりません。

編集:

これは答えとして現れ続けるので、私も試しました:

exec("/usr/local/php53/bin/php csv.php $file $user > /dev/null 2>&1 &");

これは、上記と同じ問題を示しています。以下のコードは実行されますが、ブラウザーを解放しません。

exec("usr/local/php53/bin/php csv.php $file $user > /dev/null 2>&1");
4

3 に答える 3

0

出力とエラーの両方を/dev/null(またはWebサーバーを実行しているユーザーに書き込み権限が設定されている場合は選択した別の出力ファイルに)リダイレクトすることと、アンパサンドを使用してバックグラウンドプロセスにすることの両方を試してください。 PHPマニュアルのユーザーノート:

<?php

exec("php /var/www/foo.php > /dev/null 2>&1 &");

試してみたところ、期待どおりに機能しました。呼び出し元のスクリプトはすぐに終了し、完了するまでバックグラウンドプロセスが実行され続けます。

于 2013-01-28T17:57:30.833 に答える
0

The issue was much simpler than I had thought. The problem was the $file (which was an uploaded file being stored in the /tmp directory) was not found. I'm not sure why, but I imagine it has something to do with the file being destroyed before the background process can get to it.

The solution was to move_uploaded_file() the file to a permanent location, and run the script with that file. That worked.

于 2013-01-29T03:00:35.023 に答える
0

代わりにこれを試してください

exec("nohup php csv.php $file $user > /dev/null &");

于 2013-01-28T07:45:26.457 に答える