2016-05-02 13 views
0

Webサーバーnginx + php-fpmにメインのPHPスクリプトがあり、WebブラウザからのGET要求を使用して別のPHPスクリプトをバックグラウンドで実行しようとします。 detect.phpコールするmain.phpでラインコード:PHP:バックグラウンドでスクリプトを実行できない

exec("/usr/bin/php -f /var/www/detect.php 6 > /dev/null 2>&1 &");  

detect.phpはを開始しません。私は間違いがない。

"&" を削除する場合:正常に起動しdetect.php

exec("/usr/bin/php -f /var/www/detect.php 6 > /dev/null 2>&1 ");  

。正常に起動しdetect.php

sudo -u www-data /usr/bin/php -f /var/www/detect.php 6 > /dev/null 2>&1 &  

スクリプト: "&" とシェルはbashから

。私は、バックグラウンドで実行する必要があるdetect.php

+0

正しいです! main.phpには他にもたくさんのアクションやスクリプトがあります。 detect.phpが終了するまで待つことはできません。 –

+0

クライアントへの接続が閉じられた後に同期して実行できますか? – Jerry

答えて

0

これを試してみて、あなたのPHPのパスを確認するには

 $dir=dirname(__FILE__); 
     $file_name="detect.php"; 
     $php_path="/usr/bin/php"; 

     $args = array(6); 

     $command1="cd $dir"; 
     $command2="$php_path $file_name ".implode(" ",$args) ." > /dev/null 2>/dev/null &"; 

     $final_command=$command1."; ".$command2; 
     shell_exec($final_command); 
+0

成功しないと、ユーザwww-dataは/ etc/passwdにシェルがなく、 "cd"コマンドを実行できません。 –

+0

@AndreyAndreev私はこのコードをローカル(MAMP、php7)とサーバー(CentOS、php5.6)でテストしていますが、execメソッドは動作していますか? try exec( "mkdir test_dir") –

+0

私はshure execの仕事です。私の記事では、 "&" = backgroundのdetect.phpがなくても正しく動作します。 detect.phpは/ tmp /のログインを作成し、他の多くのジョブを行うことができます。 –

関連する問題