繁体   English   中英

从php执行Shell脚本,但是sh脚本中的命令无法运行

[英]Shell script executed from php, but commands in sh script wont run

我正在制作一个PHP页面,目的是创建和激活Apache VirtualHost文件。

这些页面生成文件并将其放置在/ etc / apache2 / sites-available /中。 之后,通过以下命令调用shell脚本:

shell_exec(“ / bin / sh /usr/local/bin/myscript.sh”);

myscript.sh:

#!/bin/sh
file=$(ls -1t /etc/apache2/sites-available/ | head -1)
a2ensite "$file" 2>&1 >/dev/null
service apache2 reload 2>&1 >/dev/null
sleep 5

该脚本似乎已被执行(睡眠时间对应于运行所花费的时间,如果我不使用2>&1> / dev / null,我将从a2ensite获取输出)。 但是该站点从未启用。

如果我从终端运行脚本,效果很好,所以我猜想这是某种权限问题。 我已经玩了两天的sudoers和文件权限,但是总是得到相同的结果。

正在添加类似

www-data ALL = NOPASSWD:/usr/local/bin/myscript.sh

和chmod 777用于测试目的,但一无所获。

有什么确定的方法吗? 我正在运行Ubuntu 16.04和PHP7。

我认为这是因为www-data没有执行服务和a2ensite命令的权利。

尝试这个 :

#!/bin/sh
file=$(ls -1t /etc/apache2/sites-available/ | head -1)
sudo a2ensite "$file" 2>&1 >/dev/null
sudo service apache2 reload 2>&1 >/dev/null
sleep 5

然后,使用sudo visudo编辑sudo文件并添加

www-data  ALL=NOPASSWD : /usr/sbin/service, /usr/sbin/a2ensite

我认为您需要在两者之间加一个点:

shell_exec('/ bin / sh'。'/usr/local/bin/myscript.sh');

另外,我使用单引号...如上所述。

或者您可以尝试:

shell_exec('/ usr / local / bin / myscript.sh');

解决了。 问题不在于sudoers或文件权限。 由于激活了Apache模块mpm-itk,命令未正确执行。 我将其停用后,效果很好。

我不需要mpm-itk,但是如果有人遇到类似问题需要将其激活,则可以尝试以下操作: https : //askubuntu.com/questions/491624/setresuid-operation-not-permitted-when-calling-via-php

(感谢迈兰)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM