0

親が2つまたは3つの子プロセスを開始してから終了する連続的なバックグラウンドプロセスの実行に問題があります。子プロセスは計算が重いため、多くの時間がかかります。

exec コマンドを使用してプロセスを開始していますが、プロセスが開始されないことも、エラーが生成されることもわかりません (エラー報告はオン、E_ALL および display_errors)。

これが私がこれをやろうとしている方法です

error_reporting(E_ALL);
ini_set('display_errors',1);
$output = '';
$dir = dirname(__FILE__).'/';
//$cmd = "nohup php {$dir}/background-service.php > /dev/null & echo $!";
$cmd = "nohup php background-service.php >/dev/null 2>&1 &";
exec($cmd );

background-service.php

<?php
ini_set('max_execution_time', 0);
ini_set('display_errors',1);

file_put_contents('a'.time().'.txt',"this is the test code");

?>

ファイルを直接ヒットするとファイルが生成されますが、execでは生成されません。execが有効になっていることをテストしました(ubuntuサーバー)

if ( $safe_mode = ini_get( 'safe_mode' ) && strtolower( $safe_mode ) != 'off' )
{
    echo 'Safe Mode is Disabled';
}
else
    echo 'Safe Mode is Enabled<br/>';


if ( in_array( 'exec', array_map( 'trim', explode( ',', ini_get( 'disable_functions' ) ) ) ) )
{
    echo 'exec is Disabled';
}
else
echo 'exec is Enabled<br/>';

どこが間違っているのか教えてください。サーバーによって無効になっているかどうかをどのように検出できますか

ありがとう

4

2 に答える 2

1

これは推測にすぎませんが、実行するもののフル パスを使用してみてください。シェルからコマンドを実行すると、あなたのユーザー アカウントで機能する場合がありますが、プロセスは apache ユーザーとして実行されていることに注意してください。

また、追加のパラメーターを指定して exec() を使用すると便利な場合があります。3 番目のパラメーターは、コマンドの戻りステータスを格納する場所を指定できます (おそらく、これを理解するのに役立ちます)。( PHPマニュアルの礼儀)

于 2013-02-28T07:03:54.663 に答える