Programmation » [PHP] Lancer un process background
Catégorie:  
   
[PHP] Lancer un process background
Publié le 19/01/2007 @ 10:36:05,
Par cauet
Salut.

Sur un backoffice je dois lancer un processus php qui peut prendre de 1min à ... plusieurs heures.

Avec l'HTTP je suis lié au problème de keep-alive, et obliger le client à laisser son navigateur ouvert ne m'enchante pas trop.

Le but serait de lancer avec mon script principal un autre processus en bash.

exemple:
exec('/usr/bin/php5 /home/file/test.php argument argument');

Mais, en théorie ce script s'arrêtera également de tourner si on kill le script principal.
Y'a t'il une solution miracle?


Merchui.
   
[PHP] Lancer un process background
Publié le 19/01/2007 @ 10:53:56,
Par ovh
Essaie en utilisant le & à la de fin de la ligne de commande, ce qui a pour effet de mettre le processus en background.
Je n'ai rien à voir avec www.ovh.com
   
[PHP] Lancer un process background
Publié le 19/01/2007 @ 11:04:37,
Par rfr
pourquoi ne pas 'demoniser' le script php qui écouterait sur un socket et qui attendrait ses ordres d'un client.
To die is a time consuming activity, it often takes a lifetime (but some are faster than others ... though)
   
[PHP] Lancer un process background
Publié le 19/01/2007 @ 11:20:31,
Par cauet
rfr> Ce serait la solution de luxe en effet.. je vais y plancher.
Le problème serait d'envoyer la requête à ce script daemon, comment?

ovh> Ca marchera tu pense?
   
[PHP] Lancer un process background
Publié le 19/01/2007 @ 11:29:49,
Par cauet
En fait je viens de contacter mon opérateur wholesale.
Il m'a dit qu'il y à une autre solution que le HTTP/TCP pour mes envois massif.
Par coup de 2000 à 10000 ... ca fait bosser les serveurs Web et pas un peu...

Il est en train de me configurer des accès SMPP, ce qui accélèrera les échanges énormément.
Wait & see...
   
[PHP] Lancer un process background
Publié le 19/01/2007 @ 11:48:34,
Par zion
Sinon t'as aucun problème pour continuer le script alors que le mec a fermé son browser. Tant que tu ne gères pas la fonction script_cancelled ou un truc du genre tu t'en * complètement.

La seule chose que tu dois faire pour éviter un timeout c'est évidemment le time_limit de PHP que tu dois faire sauter avec un joli 0 et soit tu fais un apache_reset_timeout dans ta boucle soit tu affiches un "." pour le plaisir de temps à autres.

Ton script pourra tourner des années comme ça si tu veux, promis... :itm:
Je suis le Roy :ocube:
   
[PHP] Lancer un process background
Publié le 19/01/2007 @ 11:50:52,
Par cauet
Et donc, si j'ai un script PHP qui boucle avec une jolie erreur, il va tourner à vie aussi?
j'ai toujours pensé qu'un timeout se faisait après X temps de non réponse du navigateur.. (vu que la page n'a jamais fini de charger)
   
[PHP] Lancer un process background
Publié le 19/01/2007 @ 12:50:04,
Par zion
Oui, il va tourner à vie aussi.
Et non, il n'y a pas de timeout, ton script peut tourner sans même trace de ton navigateur, le keep-alive dont tu parles n'a strictement aucun rapport.
Je suis le Roy :ocube:
   
[PHP] Lancer un process background
Publié le 19/01/2007 @ 13:48:28,
Par cauet
:alph-one:
   
[PHP] Lancer un process background
Publié le 19/01/2007 @ 23:17:31,
Par cauet
Pour info, j'ai implémenté le protocole SMPP!
Y'a franchement pas photo... avant: 2000ms à présent: 20ms :petrus:
Et en plus je ne fait la phase identification qu'une seule fois, ce qui augmente la rapidité des envois suivants..

Bon, je vais quand même passer tout ça dans un script différent à présent.
On va essayer le "&" qu'ovh à proposé :dawa:
   
[PHP] Lancer un process background
Publié le 05/02/2007 @ 15:59:56,
Par cauet
Bon, me revoilà.
Ca à beau être plus rapide, j'ai toujours besoin de détacher le script du père, ca reste trop long.

Ma commande:


exec("/usr/bin/php5 /home/smsdata/automation/envoismsdetache.php ".$orderID." &");


Le problème, c'est que le "&" ne fonctionne pas.. j'ai foutu un sleep(10) dans envoismsdetache.php et ma page web ne s'affiche qu'après 10 secondes...

Alors, une brillante idée?
   
[PHP] Lancer un process background
Publié le 05/02/2007 @ 16:07:09,
Par cauet
C'est bon j'ai trouvé!
Dans les commentaires de la fonction PHP:


exec("/usr/bin/php5 /home/smsdata/automation/envoismsdetache.php ".$orderID." > /dev/null & echo \$!");


:smile:
   
[PHP] Lancer un process background
Publié le 05/02/2007 @ 17:12:58,
Par cauet
et si on fait $pid = devant, devinez quelle valeur renvoie cette variable.. bien pratique :smile:
Répondre - Catégorie:  
Informaticien.be - © 2002-2024 AkretioSPRL  - Generated via Kelare
The Akretio Network: Akretio - Freedelity - KelCommerce - Votre publicité sur informaticien.be ?