é possível recarregar o httpd a partir do php

1

Eu tenho um servidor LAMP em execução no CentOS 5.5 de 64 bits e gostaria de recarregar meu serviço httpd depois de criar novos subdomínios.

Eu tenho 3 servidores montados no meu servidor web e, dependendo dos recursos que cada servidor montado possui, eu crio novas contas de usuário e as adiciono ao servidor disponível.

por exemplo, quando um usuário se registra e precisa de 5GB de espaço, meus scripts PHP pesquisam meus servidores montados para ver se eles têm um slot de alocação aberto para um novo usuário. se não, então ele se move para o próximo servidor e assim por diante. Então, dependendo do servidor eles acabam em criar novos arquivos conf para refletir esse servidor como seu DocumentRoot

o problema é que preciso recarregar o serviço httpd manualmente depois que cada subdomínio é criado para um usuário específico.

Estou tentando encontrar uma maneira de ter o serviço httpd recarregado assim que um usuário se registra.

Atualmente estou tentando isso:

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

meu serviço httpd está localizado em /etc/init.d/httpd

    
por Eli 31.08.2011 / 10:09

3 respostas

4

Executar comandos requer raiz do PHP não é uma boa ideia. Eu sugiro que você monitore a pasta /etc/httpd/conf.d e recarregue o Apache sempre que ele for alterado. Dê uma olhada no incron .

Instale-o do repositório rpmforge :

# yum -y install incron

Edite o crontab do root com incrontab -e :

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

Comece:

# service incrond start
# chkconfig incrond on

e crie um arquivo .conf em /etc/httpd/conf.d e dê uma olhada em /var/log/cron para ver o que acontece.

    
por 31.08.2011 / 10:34
1

Eu faria isso fazendo com que o php criasse um diretório em algum lugar no sistema de arquivos e então fizesse um script do cron rodar como root, que verificaria a existência do diretório e reiniciaria o servidor HTTP se ele existisse e removeria o diretório. Desta forma, pelo menos você não está dando privilégios demais ao usuário do httpd.

    
por 31.08.2011 / 10:30
0

O script PHP poderia invocar "apachectl restart" via sudo (isto é, sudo /usr/sbin/apachectl restart ) e sudo poderia ser configurado para permitir que o usuário que executa httpd (e, portanto, presumivelmente, o script PHP) execute esse comando sem senha . Essa linha de código sudoers alcançaria isso:

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

Obviamente, você precisará garantir que o usuário e o caminho estejam corretos para o seu ambiente; as minhas são tiradas de um sistema CentOS 5.

    
por 31.08.2011 / 10:23

Tags