1 votes

Est-il possible de recharger httpd à partir de php ?

J'ai un serveur LAMP fonctionnant sous CentOS 5.5 64-bit et j'aimerais recharger mon service httpd après avoir créé de nouveaux sous-domaines.

J'ai 3 serveurs montés sur mon serveur web, et en fonction des ressources dont dispose chaque serveur monté, je crée de nouveaux comptes utilisateurs et les ajoute au serveur disponible.

Par exemple, lorsqu'un utilisateur s'inscrit et a besoin de 5 Go d'espace, mon PHP scripts recherche dans mes serveurs montés pour voir s'ils ont un emplacement d'allocation ouvert pour un nouvel utilisateur. si ce n'est pas le cas, il passe au serveur suivant et ainsi de suite. Donc en fonction du serveur sur lequel ils se retrouvent, je crée un nouveau fichier conf pour refléter ce serveur en tant que DocumentRoot.

Le problème est que je dois recharger le service httpd manuellement après la création de chaque sous-domaine pour un utilisateur particulier.

J'essaie de trouver un moyen de recharger le service httpd dès qu'un utilisateur s'enregistre.

C'est ce que j'essaie actuellement :

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

mon service httpd est situé à /etc/init.d/httpd

4voto

quanta Points 49664

Exécuter des commandes nécessite d'être root depuis PHP n'est pas une bonne idée. Je vous suggère de contrôler la fonction /etc/httpd/conf.d et rechargez Apache chaque fois qu'il est modifié. Jetez un coup d'œil à incron .


L'installer à partir de rpmforge dépôt :

# yum -y install incron

Modifier la crontab de root avec incrontab -e :

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

Démarrez-le :

# service incrond start
# chkconfig incrond on

et créer un .conf dans le fichier /etc/httpd/conf.d et jeter un coup d'œil sur /var/log/cron pour voir ce qui se passe.

1voto

MadHatter Points 77602

Le script PHP script pouvait invoquer "apachectl restart" via sudo (ie, sudo /usr/sbin/apachectl restart ), et sudo pourrait être configuré pour permettre à l'utilisateur qui exécute httpd (et donc, probablement, le script PHP script) d'exécuter cette commande sans mot de passe. Cette ligne de sudoers permettrait d'atteindre cet objectif :

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

Évidemment, vous devrez vous assurer que l'utilisateur et le chemin d'accès sont corrects pour votre environnement ; les miens sont tirés d'un système CentOS 5.

1voto

user9517 Points 113163

Je ferais en sorte que php crée un répertoire quelque part dans le système de fichiers et qu'un cron script exécuté en tant que root vérifie l'existence du répertoire et redémarre le serveur HTTP si c'est le cas et supprime le répertoire. De cette manière, vous ne donnez pas trop de privilèges à l'utilisateur httpd.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X