PHP可以重启Apache吗?

时间:2009-01-08 20:16:04

标签: php apache

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

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

感谢您的帮助!!

7 个答案:

答案 0 :(得分:18)

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

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

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

使用cron脚本会引入延迟(如果你每分钟运行一次,最多会延迟60秒),但除此之外应该可以按你的需要工作。

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

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

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

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

答案 1 :(得分:13)

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

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

这样做的原因是我不想给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中作为主机做... wwwctrl @ host @”。

答案 2 :(得分:1)

你不想传递'重载'而不是'重启吗?'

答案 3 :(得分:1)

要执行此操作,您需要编辑sudo文件,然后使用sudo执行系统上使用的restart命令。如果您提供详细信息,我可以告诉您,但您甚至可以访问吗?它是托管的吗? Cron在这里可能是更好的选择。

答案 4 :(得分:1)

at将能够做到这一点,不确定你是否可以安排到第二个,但我想这取决于实施

答案 5 :(得分:1)

我会创建一个守护进程来监视启用站点的目录,并在添加或修改文件时重新启动Apache。然后你不必像cron一样等待60秒。

答案 6 :(得分:0)

这种事情违反了标准的命令链,因为apache调用了php,而不是相反。我是第二个cron建议。只需设置一个具有足够权限的cron作业来检查主机文件的更改,并重新启动apache(如果找到)。