我有一个运行在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系统中获取的。