【发布时间】:2014-05-26 16:26:09
【问题描述】:
我知道有人回答了类似的问题,但我没有得到他们的帮助。 所以,Perl 命令:
$temp=`/home/pi/spitest/RaspberryPi-mcp3008Spi/tempv1`;
print $temp;
从 linux 控制台运行时正确显示程序 tempv1 的输出:
pi@raspberrypi /var/www/cgi-bin $ ls -la temp.pl
-rwxrwxr-x 1 root root 193 Apr 12 15:09 temp.pl
pi@raspberrypi /var/www/cgi-bin $ perl temp.pl
Content-Type: text/plain
<html><body>20.4</body></html>pi@raspberrypi
但是当我从浏览器运行它时它不会显示这个特定的输出:
http://192.168.1.102/cgi-bin/temp.pl
output: <html><body></body></html>
我的服务器是 lighttpd,它的用户和组都是 www-data。 感觉这是一个许可的事情,但我想听听你的意见。
解决方案编辑: 一开始我看不到与 /dev/spidev* 设备的连接,但现在很明显问题就在那里(文件权限)。感谢大家的帮助,对于最初的误导信息,我深表歉意:
我想从 Perl 脚本调用的系统命令使用这些 spidev* 设备与芯片通信。当我从 CLI (user=pi) 调用此系统命令 (应用程序) 时,它运行良好,但是当它作为通过 Web 服务器 (user=www-data) 启动的 Perl 脚本的一部分执行时,应用程序失败了,显然是因为用户 www-data 没有访问 /dev/spidev* 的权限。
我的解决方法是将 /dev/spidev* 设备添加到 www-data,但也许我必须找到更干净的解决方案。
太糟糕了,stackoverflow 不允许我发布这个答案,因为我的声誉很低。
【问题讨论】:
-
你的 Perl 程序中只有这两行吗?
-
它还有其他几行,但它以“#!/usr/bin/perl”开头
-
你能
su到www-data看看你能不能运行这个脚本吗? -
像真正的可执行文件一样执行,无需 perl。
-
好的,找到了解决方案。我想在 Perl 脚本中执行的系统命令(程序)使用了一个 SPI 设备(/devf/spidev0.0),来自 CLI 的用户 pi 可以访问,但用户 www-data 没有。