正如标题所述,当我尝试手动执行脚本时,双击并通过终端按执行。它工作正常
但是,当我运行php脚本或在终端窗口中键入php时
/usr/bin/php start_cam.php它锁定(命令没有以"$“结束,"$”没有显示在终端窗口中,以显示它已经结束了任务,并且它不能正常工作。
下面是我的php脚本
<?php
$command =escapeshellcmd("/bin/bash cmd_start_cam.sh");
$output = shell_exec($command);
echo $output;
echo "php_startcam2";
?>下面是我的bash脚本(cmd_start_cam.sh)
!/bin/bash
echo 'running start camera script'
cd
sudo chmod 755 /etc/rc.local
cd
cd RPi_Cam_Web_Interface
sudo chmod u+x RPi_Cam_Web_Interface_Installer.sh
sudo ./RPi_Cam_Web_Interface_Installer.sh stop
sudo ./RPi_Cam_Web_Interface_Installer.sh start
echo 'complete start camera script' 注意:我使用cd来确保根目录下的im与文件所在的位置相同。由于它是通过手动执行的,不认为存在路径问题吗?任何帮助都是非常感谢的。谢谢
Update:这是终端命令窗口输出的错误:
我想我在bash脚本命令echo 'complete start camera script'之后遇到了管道破裂
终端窗口输出cmd_start_cam.sh: line 12: echo: write error: Broken Pipe,并且不像正常执行时那样以$结束
顺便说一下,这是在raspberry pi 2上运行的。
更新已解决/解决方案:
感谢@ikra对检查apache日志文件的洞察力,这使我发现根本原因是权限访问。www-数据需要添加到sudoers文件中。
pkexec visudo。(源:https://askubuntu.com/questions/73864/how-to-modify-a-invalid-etc-sudoers-file-it-throws-out-an-error-and-not-allowi)发布于 2015-09-27 21:37:52
感谢@ikra对检查apache日志文件的洞察力,这使我发现根本原因是权限访问。www-数据需要添加到sudoers文件中。
pkexec visudo。(源:https://askubuntu.com/questions/73864/how-to-modify-a-invalid-etc-sudoers-file-it-throws-out-an-error-and-not-allowi)发布于 2016-05-20 11:07:49
我最近发布了一个项目,允许PHP获得真正的Bash并与之交互(如果请求作为根),它解决了exec()和shell_exec()的限制。到这里来:https://github.com/merlinthemagic/MTS
下载后,只需使用以下代码:
$shell = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true);
$return1 = $shell->exeCmd('php start_cam.php');
//the return will be a string containing the return of the command
echo $return1;您可以维护bash脚本,并像我的示例那样简单地触发它。然而,看到这个脚本只是一堆bash命令,为什么不直接将它们触发到shell中,这样就可以处理返回和任何异常。
在安全性方面,这比将apache作为root或在解决方案更新中列出的大范围开放的sudo权限运行要好得多。但是让PHP靠近根总是很棘手的。
我构建的项目通过以下两种方式之一实现了根bash:
1)允许apache拥有sudo python的权利。
或
2)每次需要根设置的shell时,都会将根凭据传递给对象。
挑出你的毒药。)阅读文件。
发布于 2015-09-22 18:27:10
你要么检查一下:
sudo一起运行。PATH)一切正常。https://stackoverflow.com/questions/32724081
复制相似问题