通过PHP重新启动Apache的问题(即使使用sudo)

作为我们网站注册过程的一部分,VirtualHost指令通过PHP创build并添加到configuration文件中,在创build好每个VirtualHost之后,apache会优雅地重新启动,以便新的网站开始工作。 在(www)下运行的用户PHP被授予了在/ etc / sudoer中重新启动apache的权限,然后调用了名为exec('/ usr / local / bin / sudo / usr / local / sbin / apachectl graceful')的php脚本。

这完美的作品。 然而,我们正在转移到一个新的服务器,我无法得到这个新的设置工作

我添加了以下行到/ etc / sudoers

apache ALL= NOPASSWD: /usr/sbin/apachectl graceful 

然后我们的PHP脚本调用:

 exec('/usr/bin/sudo /usr/sbin/apachectl graceful'); 

如果我为Apache用户启用shell访问并且login,我可以运行“sudo / usr / sbin / apachectl graceful”,这完全正常,但是从PHP调用它不起作用。

有没有人有任何想法? 谢谢。

在我们以前的FreeBSD服务器上,我们运行的是Apache 1.3.x和PHP 4.4

我们的新服务器是CentOS 5.4 w / Apache 2.2.x和PHP 5.3.2

在sudoers文件(使用visudo)中,在现有的默认行下,添加:

 defaults:www !requiretty 

其实,你确定它是以“www”用户身份运行吗? CentOS的默认值是“apache”。 一个小脚本来尝试:

 <?php print system("whoami");?> 

如果不是“www”,只需replace上面的sudoers中的“www”位即可。

你可以尝试与shell_exec?