我有各种运行守护程序服务的PI,这些服务在启动时自动启动。我正在尝试设置一个网页来监控每个守护程序服务的状态。为此,我提出了以下PHP脚本:
<?php //dashboard.php
$command = "ssh -p 97 -i PI12.rsa pi@192.xxx.xx.xx tail -5
/var/log/vidlog.csv ; sudo service surround status ";
$output = shell_exec($command);
echo "<pre>$output</pre> ";
?>
此脚本位于我的CMS服务器上,该服务器与我用于连接到PI(通过SSH)的服务器相同。该脚本在从命令行执行时运行,因此我知道该脚本有效,但我的Web浏览器显示空白页面。我正在使用我使用以下命令安装的Apache Web服务主机:
$ sudo apt-get install apache2
我假设问题是我的Apache服务器无权访问我的PI?我需要做些什么才能让我的Apache Web服务器和PI进行交互?
答案 0 :(得分:0)
您向我们展示的代码根本无法运行 - 它有语法错误。我认为您在sudo service surround status
身份文件上没有路径 - 请告诉我你没有把它留在你的文档根目录中?
使用shell_exec调用shell命令是一个非常粗糙的工具。你真的想看到返回状态和stderr。虽然您可以使用IO重定向解决后者问题,但您最好使用proc_open()来解决这两个问题。
请注意,ssh(与许多Unix / Linux命令一样)有一个用于调试的-v选项,并且PHP具有非常好的ssh扩展名。
答案 1 :(得分:-1)
问题是www-data用户没有SSH到PI的正确权限。
所以我通过进入 / etc / apache2 / envvars 并将www-data用户更改为有权访问PI的用户来找到解决方案:
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
为:
export APACHE_RUN_USER=myuser
export APACHE_RUN_GROUP=myuser