exec -> exit php [RESOLU] - PHP - Programmation
Marsh Posté le 26-07-2007 à 10:43:49
oops trop vite pour le choix de catégorie.. pardon. si qqun peut me le déplacé :-)
Marsh Posté le 26-07-2007 à 14:34:20
c'est fait mais tu pouvais le faire en modifiant ton 1er message
Marsh Posté le 26-07-2007 à 14:46:32
ah bon ? mince. j'avais pas vu qu'on pouvait les déplacer !
désolé
Marsh Posté le 26-07-2007 à 14:55:13
Ca me paraît peut-être un peu extrêmement logique que redémarrer apache kill aussi php, nan ?
Marsh Posté le 26-07-2007 à 15:05:20
je redémarre pas, je fais un reload
Le but de reload est de justement de ne pas coupé les connexions actives (et donc, c'est cencé ne tué aucun des processus fils en cour de travaux)
Marsh Posté le 26-07-2007 à 15:30:16
Je viens de le passer en CGI, pareil
Le hic, c'est que si je place un echo 'toto' AVANT, je ne le vois pas.
C'est pour ca que je dis que j'ai l'impression que mon script PHP s'arrete au moment du exec/system (j'ai essayé avec toutes les fonctions possibles), et d'ailleurs, mon exec fonctionne bien, mon apache est bien rechargé
Marsh Posté le 27-07-2007 à 10:24:47
Ca n'a pas l'air d'être documenté, et peu de monde en parle sur le net mais un "httpd reload" n'a pas l'air de se contenter de lire les fichiers de configuration d'apache et d'appliquer les nouvelles options. Visiblement, ça tue et relance également tous les modules d'apache.
C'est logique pour deux raisons :
- le but est de prendre en compte tous les fichiers de config et les modules en ont à lire eux aussi quand on les lance
- en modifiant le httpd, on peut très bien enlever des modules qui ont une influence sur les autres modules : il faut qu'ils soient tous au courant du changement
Conséquence indirecte de la maneouvre, les traitements en cours dans les modules seront interrompus.
En fait, dans la doc, il n'est pas dit que les traitements en cours seront exécuté jusqu'au bout mais que le serveur continuera d'écouter les ports réseaux et de répondre aux demandes (ce qui ne veut pas dire pour autant qu'il répondra dans le dixième de seconde qui suit l'arrivé de la demande, il faut bien que les modules soient relancé)
Le comportement de ta page est donc logique.
PS : Si tu veux être certains que ton script s'arrête à cette étape là, envoie plutôt des données dans une base de donnée, ça sera plus sur qu'un affichage navigateur qui peut être bloqué par une autre couche d'apache.
Marsh Posté le 27-07-2007 à 10:41:22
Mon but est que lorsque je créé ou détruit un virtual host (qui est fait est un fichier .conf que je rajoute dans le répertoire) est de pouvoir le rechargé.
C'est donc infaisable ?
Est-il possible de lancé un script shell en background ? (que mon script PHP n'attende pas qu'il soit fini) avec un & ca peut marché ?
Car, avec un script shell, un sleep de 2 secondes et le lancement de mon reload, je devrais y arriver non ?
Marsh Posté le 27-07-2007 à 10:53:00
Je viens d'essayer avec un script shell
Rien a faire, le script PHP (en CGI) attends que le script shell soit fini
j'ai essayé plusieurs commande :
sudo -u root /root/bin/httpd_realod.sh &
bash -c "exec nohup setsid sudo udo -u root /root/bin/httpd_realod.sh &"
rien n'y fait.. :-(
Le script shell est un sleep 8 && /etc/init.d/httpd reload
Marsh Posté le 27-07-2007 à 11:04:31
Gagné !
Ca marche avec ca :
exec('bash -c "exec setsid sudo -u root /root/bin/httpd_realod.sh > /dev/null 2>&1 &"');
Merci !
Marsh Posté le 26-07-2007 à 10:42:30
Lorsque je fais un exec("sudo /etc/init.d/httpd reload" ); ca exit mon script PHP (donc page totalement blanche).
Pourquoi ?
Le script shell n'est pas censé un bash (présence de #!/bin/bash au début du script) et que ce script bash quit une fois fini (et non pas mon php)
Message édité par nORKy le 27-07-2007 à 11:04:45