我正在摆弄我的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目录中。