Comment puis-je économiser une ressource de processus de proc_open afin de vérifier l'état plus tard?

StackOverflow https://stackoverflow.com/questions/949437

Question

Je suis en cours d'exécution d'un script sh qui exécute un java processus par php ubuntu serveur. J'utilise proc_open pour l'exécution du processus. généralement le flux de travail va comme:

  • demander une page ->
  • script est exécuté (jusqu'à ce qu'il soit terminé) ->
  • page de résultat.

Dans mon cas, le script est exécuté en parallèle de sorte que le serveur n'attendra jusqu'à ce que le script est terminé (il faut des heures parfois si elle ne peut pas), donc je dois sauver cette ressource en quelque sorte de le suivre plus tard (état de le processus ou tout simplement arrêter).

Le type de ressource est "processus", j'ai utilisé cette fonction get_resource_type pour l'obtenir.

sérialisation ne fonctionnera pas dans ce cas - ressource est un exceptionnel (vous pouvez regarder http://il2.php.net/manual/en/function.serialize.php à l'intérieur de la zone des paramètres).

Mon objectif est une bonne gestion des processus. ce que quelqu'un sait comment puis-je utiliser la ressource ou d'une autre façon que vous le feriez pour la gestion des processus.

Était-ce utile?

La solution

Vous ne pouvez pas stocker les types de ressources pour une utilisation ultérieure en PHP. Ce que vous devez faire est de mettre en œuvre une certaine forme de communication asynchrone - peut-être un fichier, où l'on écrit des informations sur l'état et l'autre lit, une mémoire partagée, un tube nommé, ...

Je regarderais dans le pcntl l'extension . Astuce:. Bifurquent n'est pas possible à partir d'un environnement de serveur Web pour des raisons de sécurité

Autres conseils

  

Dans mon cas, le script est exécuté en parallèle de sorte que le serveur n'attendra jusqu'à ce que le script est terminé (il faut des heures parfois si elle ne peut pas) ..

Cela ne devrait pas être un problème lui-même. Vous pouvez facilement avoir un processus de php en cours d'exécution à long, aussi longtemps que ce n'est pas lancé à partir d'un serveur Web. Si vous devez lancer le processus à partir d'une application Web, je vous suggère d'insérer une entrée dans une table de base de données, puis un cronjob exécuter un script qui vérifie cette file d'attente et faire le traitement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top