Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 12/10/2015, à 12: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 smile

Dernière modification par vichenze (Le 13/10/2015, à 11:42)

Hors ligne

#2 Le 13/10/2015, à 00: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, à 09: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, à 09: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, à 11: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 smile

(php /var/www/plop/index.php param1 param2 && php /var/www/plop/index.php param3 param4) > /dev/null 2> /dev/null &

Hors ligne