当前位置:  开发笔记 > 编程语言 > 正文

PHP可以重启Apache吗?

如何解决《PHP可以重启Apache吗?》经验,为你挑选了2个好方法。

我有一个本地服务器,需要更改虚拟主机apache配置文件,然后重新启动apache,以便新配置生效.

PHP可以这样做吗?我试过passthru和exec,但他们没有工作.也许问题是我正在尝试重启PHP的父进程?

谢谢你的帮助!!



1> Chris Burges..:

我使用了一个cron脚本(用PHP编写,不是从Web服务器执行)来检查服务器是否已启动并重新启动服务器.

但是,我不会从服务器创建的进程中执行此操作,因为您知道您将要杀死父进程,这会对子进程产生不良影响.

最简单的方法是拥有一个PHP可以创建的文件/ tmp/RESTART_APACHE,以及cron脚本检查的文件.如果cron脚本看到文件/ tmp/RESTART_APACHE,那么它会正确重启Apache.

使用cron脚本会引入延迟(如果每分钟运行一次,最多60秒),但除此之外应该按照您的意愿工作.

根据您打算如何使用它,这可能会有所帮助.

(您可能希望使用与/ tmp /不同的目录来设置权限,并防止服务器上的任何人能够创建该文件.)

编辑:请参阅Aaron H对此帖的评论.我同意他所说的话:你真的要小心,重启你的网络服务器的能力不是一般公众可以获得的服务.

限制对可以触发重启的系统的访问; 确保触发重新启动的文件具有限制性权限,因此只有Web进程可以创建该文件,并且通常是智能的.


@Java PHP - 如果你只是想重新加载配置,你只需要运行"apachectl graceful"(或"apache2ctl graceful")

2> mark..:

我已经完成了这件事.但是,它仅用于开发环境,可以根据需要为开发人员快速创建虚拟主机.到目前为止工作非常愉快.

我的方法是在系统上创建一个新用户,为这个用户提供重新加载apache的权限,并从Apache-> PHP使用SSH到localhost,使用授权密钥,不用密码发送给该用户,发出命令.

这样做的原因是我不想给apache用户(通常是www-data)通常重新加载自己的能力.我将新用户命名为wwwctrl.

我使用的命令是:

ssh -i /path/to/key-file wwwctrl@localhost sudo /etc/init.d/apache2 reload

我必须手动执行此命令一次作为wwwctrl用户将本地主机密钥添加到~www.ctrl/.ssh/known_hosts.

我使用proc_open()来监视命令的执行.

事实上,我正在为不同系统上的不同Apache安装生成一批虚拟主机,因此在每个系统上我都有这个wwwctrl用户来重新加载Apache,基本上这样做是在"foreach hosts as host do ... wwwctrl @ host @".

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有