[英]PHP running bash (.sh) script. dpkg --info works but not dpkg -i
示例PHP脚本如下所示:
#!/usr/bin/php
$file = '/private/var/www/app/install.sh';
if(is_file($file)){
$output = shell_exec('bash /private/var/www/app/install.sh');
fwrite(STDOUT, $output."\n");
}
exit(0);
install.sh示例
#!/bin/bash
clear
echo "Executing Install Script..."
dpkg --info /private/var/www/app/app.deb
dpkg -i /private/var/www/app/app.deb
echo "Script Finished"
exit 0
这将打印出最终的dpkg --info数据,但不会运行dpkg -i。 它不会打印出任何错误或任何内容...
另外,这是通过网络浏览器执行的。 从终端运行脚本时,它可以正常工作。 但是在网络上,仅返回info命令。
您在此处尝试执行的操作可能涉及一些安全问题,我不会在此发表评论。 但是,我猜想dpkg -i
需要以root身份运行,而您的Web服务器(执行install.sh脚本)不是以root身份运行。 另一方面, dpkg --info
命令不需要root特权即可运行,因此当通过Web服务器的用户执行时,您将看到其输出。 如果您确实需要以root用户身份运行此脚本,则可能需要查看特定的/etc/sudoers
配置。 也许从这里开始: https : //help.ubuntu.com/community/Sudoers
dpkg --info
不需要root权限,而dpkg -i
则需要root权限。 由于您在浏览器上运行脚本,因此这意味着您的脚本在php / apache的用户上运行。 我相信,在大多数安装中,该用户没有root权限。
为了克服这个问题,您可以创建某种具有以下步骤的处理器:
创建queue
列表 :
浏览器脚本 :
处理器脚本(比方说queue_processor.php
) :
最后一步是,在crontab上设置queue_processor.php
并将其所有者作为根用户:
* * * * * root /path/to/php/binary/php /path/to/your/queue_processor.php
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.