在我花费数小时的时间里,我需要你的宝贵帮助。 范围:在覆盆子pi上运行的Apache2和PHP; 前提:我对Linux环境的了解很少!
目标:从另一个作为网页运行的php脚本启动一个长期运行的php脚本,它打开套接字。换句话说,该应用程序是一个聊天,我需要从一个网页启动PHP服务器脚本,为了我的方便。
问题:如果我从控制台运行它,使用以下命令记录为" pi",
php -q /var/www/chatSocket.php > /var/www/tmp/socketProcessOutput.txt 2>&1 & echo $!
它的作用就像一个魅力,但如果它尝试从脚本中执行此操作,请使用以下内容(不要介意连接的字符串和输出到变量的分配 - 删除它们没有区别):
$result .= "Result of pkill (killed process): " .shell_exec('sudo pkill -f SongWebSocket.php') ."\n";
$result .= "Launching new process: id returned:". shell_exec('php -q /var/www/chatSocket.php > /var/www/tmp/socketProcessOutput.txt 2>&1 & echo $!') ."\n";
$result .= "Checking running SongWebSocket.php process:" ."\n";
$result .= shell_exec('ps -A aux| grep -e SongWebSocket.php -e USER') ."\n";
..它不起作用(似乎它启动了脚本,但套接字没有打开)。
为什么会发生这种情况的任何线索?
另外,这可能是因为我对Linux的一点知识,为什么我从命令中得到了一个不同的输出 ps aux | grep -e SongWebSocket.php -e USER 如果我从shell,用户pi或sript,作为www-data用户启动它。
我期待着你的帮助。提前致谢! 马可。
答案 0 :(得分:0)
www-data用户没有我猜的权限。为什么不为每个shell_exec行添加“sudo”? (sudo以root权限启动程序)。它不漂亮而且不安全,但它可能适用于您本地的家庭网络。 sudo php ... sudo ps -A aux等。另外你应该确保php safe_mode已关闭。你可以通过添加phpinfo()来看到;你的PHP代码