[RESOLU] exec -> exit php

exec -> exit php [RESOLU] - PHP - Programmation

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
Reply

Marsh Posté le 26-07-2007 à 10:42:30   

Reply

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é :-)

Reply

Marsh Posté le 26-07-2007 à 14:34:20    

c'est fait mais tu pouvais le faire en modifiant ton 1er message ;)

Reply

Marsh Posté le 26-07-2007 à 14:46:32    

ah bon ? mince. j'avais pas vu qu'on pouvait les déplacer !
désolé

Reply

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 ? [:dawak] [:dawak]

Reply

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)

Reply

Marsh Posté le 26-07-2007 à 15:06:06    

Comment est configuré php, en module ou en cgi ?

Reply

Marsh Posté le 26-07-2007 à 15:09:12    

module

Reply

Marsh Posté le 26-07-2007 à 15:15:56    

Ca vient peut-être de là ?

Reply

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é

Reply

Marsh Posté le 26-07-2007 à 15:30:16   

Reply

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.


Message édité par omega2 le 27-07-2007 à 10:26:34
Reply

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 ?

Reply

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


Message édité par nORKy le 27-07-2007 à 10:57:07
Reply

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 !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed