Php Jeedom: appel asynchrone?

Salut

Dans mon code configuration.php du plugin je voudrais appeler une autre fonction php en asynchrone car elle nécessite 1 min pour terminer. J’ai essayé exec() mais contraitrerment a shell_exec() ca bloque l’éxecution.

Il y aurait des libs tierces comme pcntl_fork ou amphp mais je voudrais éviter de rinventer la roue…Y aurait-il une primitive dans Jeedom? J’ai bien pensé aux scénarios mais je ne vois pas comment en ajouter un dans un plugin?

Merci pour vos lumières.

Bonjour,

Vous pouvez en dire plus sur cette fonction asynchrone ? Est-ce qu’il faut en récupérer le retour ?

Je pense en premier lieu à rajouter & en fin de ligne de commande pour que le process s’exécute en tâche de fond mais je ne sais pas si ça s’appliquerait dans votre cas.

A+
Michel

Bonjour
C’est pas simple mais tu peux le faire avec un cron (au sens jeedom) qui se lance que une fois.

Ou un « at now cmd »

Merci pour vos réponses

Il s’agit d’une fonction php qui installe du code ou pas en fonction de la valeur d’une cle que je lis via config::getKey() que j’execute depuis un bouton sur la page configuration

J’ai testé contrairement a une commande shell le ´&´ ne fonctionne pas avec la fonction, elle s’execute en sequentiel et bloque l’affichage. Bien sur je pourrais en faire un shell mais je trouve ca dommage. Le cron ne me va pas non plus car on ne va pas attendre 1 min pour que l’exec se fasse…

Hello,

Il faut fermer les sorties standard et d’erreur lors du lancement pour le détacher du process PHP.

Ajoute >/dev/null 2>&1 & à la fin de ta commande dans exec(), attention si tu utilises déjà un/des redirection(s).

Bad

Salut,

Moi j’utilise ca dans mes plugins pour les appels asynchrones, tu peux le réutiliser tel quel ou t’en inspirer: GitHub - Mips2648/jeedom-tools: Tools and helper class for plugin development

2 « J'aime »

Bon j’ai pas réussi avec la méthode de @Bad par contre @Mips ca fonctionne nickel merci beaucoup :wink:

2 « J'aime »

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.