CGI文件的奇怪行为

时间:2014-01-29 08:02:11

标签: apache bash cgi raspberry-pi

我已经完成了一个小项目。在其中,我使用了一些.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命令,但是当它被调用时,没有任何反应。

谢谢!

2 个答案:

答案 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标头不正确。