#1 Le 12/10/2015, à 11:53
- vichenze
[Résolu] Lancer 2 tâches l'une après l'autre + rendre la main à PHP
Bonjour,
dans un script PHP, j'ai besoin de lancer 2 autres scripts assez long sans bloquer l'utilisateur. J'utilise pour cela la commande exec. Les 2 scripts en question doivent être lancés l'un après l'autre, et donc être non bloquant pour exec, en étant lancés en arrière plan (c'est ce qui me paraît le plus simple).
Après quelques recherches j'ai découvert qu'on pouvait séparer 2 commandes par un point-virgule pour que la seconde s'exécute quand la première se termine, par contre je n'arrive pas à coupler cela avec la possibilité de lancer en arrière plan les scripts.
Voici ce que j'ai essayé pour l'instant comme commande pour le exec :
# Fonctionne bien mais rend la main uniquement lorsque les 2 scripts ont été exécutés
php /var/www/plop/index.php param1 param2 > /dev/null 2> /dev/null ; php /var/www/plop/index.php param3 param4 > /dev/null 2> /dev/null
# Fonctionne bien mais rend la main uniquement lorsque le premier script est terminé
php /var/www/plop/index.php param1 param2 > /dev/null 2> /dev/null ; php /var/www/plop/index.php param3 param4 > /dev/null 2> /dev/null &
# Erreur de syntaxe, dommage
php /var/www/plop/index.php param1 param2 > /dev/null 2> /dev/null & ; php /var/www/plop/index.php param3 param4 > /dev/null 2> /dev/null &
# Les 2 scripts se lancent en parallèle, or je voudrais que le second ne se lance que lorsque le premier se termine
(php /var/www/plop/index.php param1 param2 > /dev/null 2> /dev/null &) ; php /var/www/plop/index.php param3 param4 > /dev/null 2> /dev/null &
Existe-il une solution à mon problème, ou dois-je modifier mon script pour que la première exécution déclenche d'elle même la seconde quand elle est terminée ?
Merci
Dernière modification par vichenze (Le 13/10/2015, à 10:42)
Hors ligne
#2 Le 12/10/2015, à 23:17
- J5012
Re : [Résolu] Lancer 2 tâches l'une après l'autre + rendre la main à PHP
le php est un langage interprete, meme si l'interpreteur peut etre lie à un pre-processeur de compilation, les instructions php seront toujours executees l'une apres l'autre ... tu peux utiliser l'illusion de la simultaneite grace à la vitesse des cpu modernes (c'est d'ailleurs ce qui se passe un peu avec le multitache) ...
la formulation du code php dependra alors de la cible : php en ligne decommande pour une execution unique et locale, ou en serveur pour une execution dynamique et mutliple ?
Hors ligne
#3 Le 13/10/2015, à 08:31
- vichenze
Re : [Résolu] Lancer 2 tâches l'une après l'autre + rendre la main à PHP
Le script parent (celui qui exécute le exec) est dynamique et exécuté via Apache, les 2 autres qu'ils déclenchent sont des appels à une API et sont exécutés via exec (et donc la ligne de commande).
Hors ligne
#4 Le 13/10/2015, à 08:36
- claudius01
Re : [Résolu] Lancer 2 tâches l'une après l'autre + rendre la main à PHP
Bonjour,
Je te propose d'utiliser l'opérateur && entre les 2 scripts pour les exécuter successivement et l'opérateur & pour lancer l'ensemble en fond de tâche:
# Le second script ne se lancera que lorsque le premier se terminera avec succès (exit 0) et la main te sera rendue avant leur fin d'exécution
(php /var/www/plop/index.php param1 param2 > /dev/null 2> /dev/null && php /var/www/plop/index.php param3 param4 > /dev/null 2> /dev/null) &
Hors ligne
#5 Le 13/10/2015, à 10:41
- vichenze
Re : [Résolu] Lancer 2 tâches l'une après l'autre + rendre la main à PHP
Merci, bien vu !
J'ai légèrement ajusté de la sorte, et ça fonctionne bien
(php /var/www/plop/index.php param1 param2 && php /var/www/plop/index.php param3 param4) > /dev/null 2> /dev/null &
Hors ligne