2016-05-02 175 views
0

我在网络服务器nginx + php-fpm上有主要的php脚本,并尝试使用来自网络浏览器的GET请求在后台运行另一个php脚本。在main.php行代码中调用detect.php:PHP:无法在后台执行脚本

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

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 &  

脚本detect.php成功启动。

+0

我需要在后台运行detect.php! 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中没有shell并且无法运行“cd”命令。 –

+0

@AndreyAndreev我在本地(MAMP,php7)和服务器(CentOS,PHP5.6)上测试这个代码,并且工作,都是可执行方法的作品?尝试执行(“mkdir test_dir”) –

+0

我是舒尔执行工程。在我的帖子中,我写道:没有“&”=背景detect.php启动并正常工作。 detect.php可以创建登录/ tmp /并做很多其他工作,我检查过。 –