Execution d'un script en arrière-plan [Résolu]

ZeroCool007 4 Messages postés jeudi 16 janvier 2003Date d'inscription 8 mars 2005 Dernière intervention - 7 mars 2005 à 10:31 - Dernière réponse : ZeroCool007 4 Messages postés jeudi 16 janvier 2003Date d'inscription 8 mars 2005 Dernière intervention
- 8 mars 2005 à 09:13
Salut,



Je cherche à éxécuter un script php en arrière-plan pour ne pas bloquer l'utilisateur dans la navigation.



Il s'agit d'un script php dont l'exécution est relativement longue, et
je ne peux pas me permettre de bloquer l'utilisateur durant cette
période. Il s'exécute sur un serveur Unix auquel j'ai totalement accès.



J'ai déjà testé les commandes "nohup" - pour me détacher du terminal et
que le script s'exécute même en cas de déconnexion de l'utilisateur -
et "&" - pour exécuter en arrière-plan. Ce principe fonctionne très
bien sur le serveur en ligne de commande, mais pas du tout dans ma page
php, je suis bloqué jusqu'à la fin de l'exécution de mon script.



Si quelqu'un à une petite idée, il est le bienvenu ici.....



Merci d'avance
Afficher la suite 

5 réponses

Répondre au sujet
ZeroCool007 4 Messages postés jeudi 16 janvier 2003Date d'inscription 8 mars 2005 Dernière intervention - 8 mars 2005 à 09:13
+3
Utile
Effectivement, j'ai mis un session_write_close(); avant de faire exec(commande),
et je ne suis pas bloqué. En fait ce n'est pas le script qui devait
bloquer en lui-même, mais je ne sais pas encore trop quoi....



Merci pour tout
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ZeroCool007
Viper31 96 Messages postés mardi 2 avril 2002Date d'inscription 7 août 2005 Dernière intervention - 7 mars 2005 à 15:08
0
Utile
Alors , ce que tu peux faire est d'effectuer une execution de script php en ligne de commande alors tu as plusieurs solution :



sois tu lance la commande : php mon_script.php

sois tu modifies ton script php pour qu'il soit lui meme executable en rajoutant en entete du fichier :

#!/usr/bin/php

<?php ... blablabla



mais si tu fais ca , tu devra changer les droit du fichiers pour qu'il soit executable :

chmod 775 mon_script.php ou un truc dans le style

et apres tu peux le lancer en faisant ./mon_script.php (comme un script shell quoi)



une fois que tu as fait ca ; tu as plus qu'a rajouter la commande en crontab pour que le script s'execute automatiquement tout seul (precision max : la minute).



par contre le souci , c'est que si l'execution est longue , le serveur
soufrira quand meme d'une perte significative de performance qui
impactera l'utilisateur malgres tes efforts .... donc tu peux peut etre
faire en sorte de découper ta tache , en plusieurs petites taches que
tu fera a different moment ...



autre chose , si ce script renvoit des chose par echo , essaye de faire
en sorte de ne pas les afficher si tu l'execute par crontab , car sinon
, tu recevra la sortie du script (les echos) par mail dans ta boite
utilisateur ^^ ca risque de devenir genant au bout d'un moment :)...

Mais si tu veux avoir les resultats de l'execution de ce script , alors laisse faire , ca sera parfait!

voila !! j'espere avoir répondu a ta question ....
Commenter la réponse de Viper31
ZeroCool007 4 Messages postés jeudi 16 janvier 2003Date d'inscription 8 mars 2005 Dernière intervention - 7 mars 2005 à 15:42
0
Utile
Merci pour ta réponse, mais j'ai déjà mis en entete la ligne #!/usr/bin/php et ca ne change rien à mon problème.



J'ai également pensé au crontab, l'ennui c'est que c'est l'utilisateur
qui, en cliquant sur un bouton, déclenche l'exécution du script.
Ensuite, il peut suivre dans la page (si elle s'affiche, quand le
script ne bloquera plus tout...) la progression de l'exécution du
script sur une barre progression.

Tout fonctionne bien, j'ai déjà testé avec 2 pages une qui lance le
script (et qui se bloque) et sur l'autre je vois alors la progression.



Vu que c'est l'utilisateur qui lance le script à n'importe qule moment, le cron ne me parrait pas être la meilleure solution.



La perte de performance du serveur n'est pas un problème, vu qu'elle
est "souhaitée", c'est l'utilisateur qui lance un processus, mais c'est
surtout que la page ne reste pas bloquée...



Merci quand même de ton aide.
Commenter la réponse de ZeroCool007
Viper31 96 Messages postés mardi 2 avril 2002Date d'inscription 7 août 2005 Dernière intervention - 7 mars 2005 à 17:29
0
Utile
Humm dans ce cas la , je vois pas ... si ca avé pas été du php , je t'aurai repondu d'utiliser les threads :) , mais bon la , c'est assez chaud effectivement
Commenter la réponse de Viper31
ZeroCool007 4 Messages postés jeudi 16 janvier 2003Date d'inscription 8 mars 2005 Dernière intervention - 7 mars 2005 à 18:13
0
Utile
A parement le problème viendrai de session_start() que j'utilise au début de mon site. Et l'utilisation de session_write_close() avant d'exécuter la commande règlerai le problème.


Je vais encore faire quelques tests pour vérifier si c'est effectivement ça !


Merci encore
Commenter la réponse de ZeroCool007

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.