是否可以从 php 重新加载 httpd

是否可以从 php 重新加载 httpd

我有一个在 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 系统。

相关内容