我有一个在 CentOS 5.5 64 位上运行的 LAMP 服务器,并且想在创建新的子域后重新加载我的 httpd 服务。
我的 Web 服务器上安装了 3 台服务器,根据每台安装的服务器所拥有的资源,我会创建新的用户帐户并将其添加到可用服务器。
例如,当用户注册并需要 5GB 空间时,我的 PHP 脚本会搜索我安装的服务器,查看它们是否有可供新用户使用的分配槽。如果没有,则移动到下一个服务器,依此类推。因此,根据他们最终使用的服务器,我会创建一个新的 conf 文件,将该服务器反映为他们的 DocumentRoot
问题是,为特定用户创建每个子域后,我需要手动重新加载 httpd 服务。
我正在尝试找到一种方法,让 httpd 服务在用户注册后立即重新加载。
目前我正在尝试这个:
system("/bin/echo '/sbin/service httpd reload > /dev/null 2>&1' | /usr/bin/at now");
我的 httpd 服务位于/etc/init.d/httpd
答案1
执行命令需要 PHP 的 root 权限,这不是一个好主意。我建议您监视/etc/httpd/conf.d
文件夹,并在文件夹发生变化时重新加载 Apache。查看因克龙。
从存储库安装rpmforge
:
# yum -y install incron
使用以下命令编辑 root 的 crontab incrontab -e
:
/etc/httpd/conf.d/ IN_CREATE,IN_DELETE,IN_MODIFY /etc/init.d/httpd reload
启动它:
# service incrond start
# chkconfig incrond on
并创建一个.conf
文件/etc/httpd/conf.d
并查看/var/log/cron
发生了什么。
答案2
我会通过让 php 在文件系统的某个地方创建一个目录,然后让 cron 脚本以 root 身份运行,该脚本将检查目录是否存在,如果存在则重新启动 HTTP 服务器并删除该目录。这样至少您不会授予 httpd 用户过多的权限。
答案3
PHP 脚本可以通过 sudo 调用“apachectl restart”(即sudo /usr/sbin/apachectl restart
),并且可以配置 sudo 以允许运行 httpd(因此,大概是 PHP 脚本)的用户无需密码即可运行该命令。这一行sudoers代码可以实现:
apache ALL=(root) NOPASSWD: /usr/sbin/apachectl restart
显然,您需要确保那里的用户和路径适合您的环境;我的环境来自 CentOS 5 系统。