如何通过点击(web)按钮重新启动Apache



我正在摆弄我的VM,我正在开发的代码要求我每次重新启动apache以捕获更改。我想如果有一个bookmarklet,或者链接或者按钮点击就好了。关于如何在CentOS 5开发虚拟机上使用PHP实现这一点,有什么想法吗?

正如Marc B所说,您需要root权限才能重新启动Apache。处理这个问题的最好方法,依我之见,是让Apache在访问权限下运行的用户通过sudo命令重新启动Apache。

您需要编辑您的/etc/sudoers文件并添加类似以下内容的行:

Cmnd_Alias      RESTART_APACHE = /sbin/service apache2 restart
www-data ALL=NOPASSWD: RESTART_APACHE

您可能需要nobody而不是www-data,这取决于Apache在哪个用户下运行。在Debian上,Apache通常在用户www-data下运行,而在Red Hat上,Apache通常在用户nobody下运行。此外,/sbin/service apache2 restart可能需要是/sbin/service apache restart/sbin/service httpd restart。这取决于你的系统配置。

完成后,在PHP中可以使用以下代码:

exec('/sbin/service apache2 restart');

(如果重启Apache的命令在您的服务器上不同,显然会更改)

请注意:这很可能被认为是一个安全风险!如果您这样做,您完全信任sudo二进制文件、service二进制文件和您的系统遵守规则,并且不让Apache/PHP进程获得根shell。我强烈建议您在http://serverfault.com上询问您在这里所做的事情的含义。

<?php echo shell_exec('service httpd restart &'); ?>

这样的脚本尝试这样做可能会有权限问题。听起来你是在一个完全的开发环境中,所以你应该给它更高的权限。

文件中包含apache的进程ID。给它发个HUP就行。可以编写一个简单的脚本(sh)来实现这一点,并将其放在cgi-bin目录中。