我已经完成了一个小项目。在其中,我使用了一些.cgi文件,我在微控制器和网络服务器之间进行通信。问题如下:
如果我使用此代码,该项目可以正常工作:
#!/bin/bash
./moveRight
echo "Status: 204 No Content"
echo "Content-type: text/html"
echo ""
但是当我使用tjis代码时,没有任何反应:
#!/bin/bash
mkdir /tmp/stream
raspistill --nopreview -w 640 -h 480 -q 5 -o /tmp/stream/pic.jpg -tl 100 -t 9999999 -th 0:0:0 &
chmod 777 /dev/ttyAMA0
LD_LIBRARY_PATH=/usr/local/lib mjpg_streamer -i "input_file.so -f /tmp/stream -n pic.jpg" -o "output_http.so -p 8080 -w /var/www" &
echo "Status: 204 No Content"
echo "Content-type: text/plain"
echo ""
我想要的是在调用.cgi时执行那些bash命令,你认为我的问题是什么?或者针对此问题的任何解决方法?
编辑:./ moveRight是一个编译的c程序,用于移动电机。我有两个不同的.cgi。第一个正确地移动电机但第二个应该执行一些shell命令,但是当它被调用时,没有任何反应。谢谢!
答案 0 :(得分:0)
在脚本中尝试exec 2> /tmp/my.log
作为第一个命令。它将stderr重定向到一个文件,以便您以后可以查看它,然后继续执行安装了该重定向的脚本。
在命令之间放置echo "before mkdir" 1>&2
等。这样,您将在日志中看到脚本中的内容。可能你只是在脚本中有一个命令没有终止。然后,您的Web浏览器将挂起,直到发生超时。
答案 1 :(得分:0)
首先尝试打印HTTP标头,然后执行以下命令:
#!/bin/bash
echo "Status: 204 No Content"
echo "Content-type: text/plain"
echo ""
mkdir /tmp/stream
raspistill --nopreview -w 640 -h 480 -q 5 -o /tmp/stream/pic.jpg -tl 100 -t 9999999 -th 0:0:0 &
chmod 777 /dev/ttyAMA0
LD_LIBRARY_PATH=/usr/local/lib mjpg_streamer -i "input_file.so -f /tmp/stream -n pic.jpg" -o "output_http.so -p 8080 -w /var/www" &
实际上,如果shell命令在stdout上打印某些内容,那么您将拥有status 500
,因为您的HTTP标头不正确。