Execution d'un script en arrière-plan

Résolu
ZeroCool007 Messages postés 4 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 8 mars 2005 - 7 mars 2005 à 10:31
ZeroCool007 Messages postés 4 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 8 mars 2005 - 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

5 réponses

ZeroCool007 Messages postés 4 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 8 mars 2005
8 mars 2005 à 09:13
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
3
Viper31 Messages postés 96 Date d'inscription mardi 2 avril 2002 Statut Membre Dernière intervention 7 août 2005
7 mars 2005 à 15:08
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 ....
0
ZeroCool007 Messages postés 4 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 8 mars 2005
7 mars 2005 à 15:42
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.
0
Viper31 Messages postés 96 Date d'inscription mardi 2 avril 2002 Statut Membre Dernière intervention 7 août 2005
7 mars 2005 à 17:29
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ZeroCool007 Messages postés 4 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 8 mars 2005
7 mars 2005 à 18:13
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
0
Rejoignez-nous