从php执行的Shell脚本,但sh脚本中的命令不会运行

时间:2016-09-08 11:24:22

标签: php linux bash apache

我正在创建一个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。

3 个答案:

答案 0 :(得分:1)

我认为这是因为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

答案 1 :(得分:0)

我认为你需要一个点:

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

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

或者您可以尝试:

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

答案 2 :(得分:0)

这已经解决了。问题不是sudoers或文件权限。由于Apache模块mpm-itk已激活,因此命令未正确执行。在我停用它之后工作得很好。

我不需要mpm-itk,但是如果遇到类似问题的人需要激活它,你可以试试这个: https://askubuntu.com/questions/491624/setresuid-operation-not-permitted-when-calling-via-php

(谢谢Myran)

相关问题