是否有可能从PHP重新加载httpd

我有一个运行在CentOS 5.5 64位LAMP服务器,并希望在新的子域名后重新加载我的httpd服务。

我有3个服务器安装到我的networking服务器,并根据每个挂载的服务器有什么资源我创build新的用户帐户,并将其添加到可用的服务器。

例如,当用户注册并需要5GB的空间时,我的PHP脚本会search我的挂载服务器,看看他们是否为新用户开放了分配插槽。 如果没有,则移动到下一个服务器,依此类推。 所以根据服务器,他们最终创build一个新的conf文件,以反映该服务器作为他们的DocumentRoot

问题是,我需要手动重新加载httpd服务后,每个子域创build一个特定的用户。

我试图find一种方法来一旦用户注册httpd服务重新加载。

目前我正在尝试这个:

system("/bin/echo '/sbin/service httpd reload > /dev/null 2>&1' | /usr/bin/at now"); 

我的httpd服务位于/etc/init.d/httpd

执行命令需要PHP的根目录不是好主意。 我build议你监视/etc/httpd/conf.d文件夹,并在Apache发生变化时重新加载。 看看incron 。


rpmforge存储库安装它:

 # yum -y install incron 

incrontab -e编辑root的crontab:

 /etc/httpd/conf.d/ IN_CREATE,IN_DELETE,IN_MODIFY /etc/init.d/httpd reload 

启动它:

 # service incrond start # chkconfig incrond on 

并在/etc/httpd/conf.d创build一个.conf文件,并查看/var/log/cron来查看会发生什么情况。

我会这样做,让php在文件系统的某处创build一个目录,然后以root身份运行cron脚本,检查目录是否存在,如果存在并重新启动HTTP服务器并删除目录。 这样至less你不会给httpd用户太多的权限。

PHP脚本可以通过sudo(例如, sudo /usr/sbin/apachectl restart )调用“apachectl restart”,并且可以configurationsudo来允许运行httpd的用户(并且因此PHP脚本)运行该命令没有密码。 这行sudoers代码将实现:

 apache ALL=(root) NOPASSWD: /usr/sbin/apachectl restart 

显然,您需要确保用户和path对您的环境是正确的; 我的是从CentOS 5系统中获取的。