php exec()通过cmd行成功运行Rscript,但不能通过浏览器运行
问题描述:
我正在尝试编写一个Web应用程序来运行我的R脚本。 我打算使用php shell_exec()来做到这一点。php exec()通过cmd行成功运行Rscript,但不能通过浏览器运行
我写了一个测试脚本这样 <?php echo shell_exec("Rscript /var/www/html/demo/MyRScript.R"); ?>
我运行它通过命令行。 php test.php
,它给出正确的输出,我也通过htop
观察,发现过程使用100%cpu几分钟。
但是,当我试图通过浏览器访问它时,通过地址http://myURL/demo/test.php
来运行它。它没有正常运行,它只给我的R脚本的前几行onbrief Off On FALSE 405 0 TRUE 0 405 petitioner P R FALSE 0 396 TRUE 414 0
并立即停止。我无法通过htop
找到该流程。
我尝试了其他简单的命令行,如ls
,rm
,它们都可以在cmd行和web应用程序上正常工作。
我不知道什么是错的。可以,因为过程需要太多的CPU,所以一些机制会终止它,如果它是通过网络调用?
或者如果有任何调试工具或方法可以用来帮助我找到问题。
这是我对堆栈溢出的第一个问题,我不知道我的信息是否足够。请告诉我是否还有其他需要解决问题的更多信息。
非常感谢。
答
原来是文件权限问题。
在我的R脚本中,有一行尝试访问文件,而Web服务器用户www-data
没有读取权限。授予许可后,一切都很顺利。
在我的命令结尾添加2>$1
是非常有用的,我能够在我的浏览器中获得错误消息。
CMD是Windows的shell。与Linux无关。 – 2016-10-01 23:44:05
opps,我认为是与命令行相同的东西。 –
有一个命令行标记,但它似乎并不有用。 – 2016-10-02 01:08:31