[PHP] Attendre la fin de l'exécution

Fermé
BLiNK - 16 sept. 2010 à 19:57
 BLiNK - 17 sept. 2010 à 17:09
Bonjour,

Je vous explique mon problème.

J'ai créé un site web en php. À partir de ce site, j'ai programmé des outils pour m'aider dans mon travail.

La situation :

J'ai un script windows (DOS) qui exécute en rsh un bash sur linux. L'exécution totale du bash dure environ 3 minutes.

En PHP, j'ouvre une fenêtre popup, j'exécute le script windows.

Dans le script windows, je crée un fichier au début (START). Ensuite, j'exécute le bash via rsh sur linux. Après avoir exécuté le bash, le script windows crée un deuxième fichier (DONE). Mon popup se rafraichit toutes les 2 secondes et vérifie si le fichier DONE existe. S'il existe, c'est que l'exécution est terminée. Pour des petits bash, ça fonctionne très bien. Mais pour lui... au bout de exactement 120 secondes, la fenêtre popup se ferme. Étrangement, le fichier DONE est crée, mais l'exécution du bash n'est pas terminée.

Mon script ressemble à ça :

TYPE NUL>start
rsh [IP_LINUX] -l [USER_LINUX] sh /tmp/bash
TYPE NUL>done

Donc, au bout de 120 secondes, le fichier DONE est créé, mais le bash n'a pas fini de s'exécuter.

J'ai changer dans le php.ini toutes les valeurs de temps... Ça n'a pas fonctionné.
J'ai ajouté dans httpd.conf de Apache (suggéré par un site trouvé sur google) :
<IfModule mod_php4.c>
php_value max_execution_time 600
</IfModule>
Ça n'a toujours pas marché.
J'ai créé un .htaccess avec la ligne "php_value max_execution_time 600" dedans et ça n'a pas marcher non plus.

Je ne sais vraiment pas quoi faire pour la suite.

Merci beaucoup d'avance et ne vous gênez pas pour me demander d'autres renseignements si nécessaire !


A voir également:

4 réponses

Personne ? :-(
0
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
17 sept. 2010 à 14:30
Bonjour,

Le fichier DONE, ce n'est pas le script php qui le fait ? C'est bien ton .bat ?
Dans ce cas, je ne vois pas en quoi la config des timeout de ton serveur web (apache ou php) peut changer quoi que ce soit.

Je pense que ça vient soit du fonctionnement de la commande rsh (vérifie ses arguments possibles), soit d'une config windows/DOS plus générale...

Xavier
0
Bonjour et merci de la réponse :-)

Dans mon fichier .bat que je lance en php, j'ai les 3 instructions suivantes (et d'autres, mais qui n'aide pas à la compréhension) :

TYPE NUL>start
rsh [IP_LINUX] -l [USER_LINUX] sh /tmp/bash
TYPE NUL>done

Donc oui c'est le .bat qui crée le fichier DONE.

Je me suis mis à réfléchir plus profondément sur la question... Je crois, comme tu dis, que PHP ou Apache n'ont pas réellement d'impact sur le fonctionnement puisque lorsque l'exécution est interrompu, le fichier DONE est créé, donc la partie PHP se termine correctement.

Pour le rsh... je ne sais pas... parce que ma commande rsh ne sert qu'à partir le bash et après que le bash ait terminé, je fais un autre rsh pour supprimer des fichiers... une commande ftp pour aller chercher des fichiers, mais, puisque l'exécution n'a pas été terminé correctement, les fichiers demandés n'existe pas donc je ne peux aller les chercher. C'est ce qui m'a fait penser que PHP (ou Apache) arrêtait l'exécution.

Maintenant, je suis plus a réfléchir sur la partie Linux... serait-ce elle qui termine l'exécution après 120 secondes ??

Si quelqu'un a une réponse de ce côté ça m'aiderais beaucoup car en ce moment je ne suis pas un expert de Linux !

Merci beaucoup de ta réponse, tu as confirmé certaines choses qui rôdaient dans mon esprit !
0
Encore moi désolé !

J'ai isolé mon problème... Je fais des telnets à répétitions à partir d'un linux.

Voici mon bash (celui que je lance dans le .bat sur Windows) :

dos2unix /tmp/switchs
for sw in 'cat /tmp/switchs'
do
(sleep 1
echo "username"
echo "password"
echo "terminal length 0"
echo "sh run"
echo "sh vlan"
sleep 4 ) | telnet $sw > /tmp/\$sw.log
done

Je m'explique :

J'ai un fichiers switchs avec les adresses ip de toutes les switchs (55)
Pour chaque "sw" dans le fichier switchs je fais un telnet pour sauvegarder la configuration (terminal lenght 0, sh run, sh vlan). J'ai un Sleep 4 pour laisser le temps au telnet de terminer. Je mets le résultats dans un fichier log portant l'adresse ip comme nom.

Après 23 telnet environ, l'exécution arrête (120 secondes) sans avoir terminé.

Quelqu'un peu m'éclaircir un peu ?? Pourquoi ma boucle for ne se termine pas ??

P.S. : Je crois vraiment que le problème vient de là parce que j'ai essayer de faire un Ping -t en rsh et il a tourné très longtemps, jusqu'à ce que je l'arrête. Donc, du côté rsh, je crois que c'est correct.
0