La question que j'ai est un peu technique... Ne sachant pas trop où la poser, je la met ici, même si elle concerne plus Apache, à mon avis.
Voici mon problème:
J'ai un exécutable que je lance depuis mon script PHP à l'aide d'un:
exec("/usr/bin/appli --pipe=/tmp/monpipe &");
Comme vous pouvez le voir, je lui passe un pipe qui me permet de la commander depuis une application externe (ici, en l'occurrence, c'est pour garder la main dessus, malgré les diverses requêtes). J'aurais créer ce pipe préalablement avec :
posix_mkfifo('/tmp/monpipe', 0777);
Ensuite, au requêtes suivantes, j'essaye d'arrêter mon application en lui envoyant une commande:
exec("echo quit > /tmp/monpipe");
Et là, ça ne marche pas, quand elle est exécuté depuis apache.
Quand je lance en utilisateur:
$ /usr/bin/appli --pipe=/tmp/monpipe &
$ echo quit > /tmp/monpipe
Elle se lance et s'arrête sans soucis.
Quand je lance les scripts PHP sans apache:
$ php launch_appli.php
$ php quit_appli.php
Elle se lance et s'arrête sans soucis, également.
Mais quand je les exécutes depuis apache, l'application s'exécute bien, et tourne dans les taches. Mais pour l'arrêt, c'est comme si l'application n'avait jamais pris le pipe. L'arrêt depuis apache coince, ainsi que:
$ php quit_appli.php
Ça coince.
$ echo quit > /tmp/monpipe
Ça coince aussi (aucune réponse). C'est ce que ça fait lorsque que lance cette commande sans avoir d'application en écoute de l'autre coté.
Donc, par déduction, ce doit être une sécurité de apache quelque part en empêche de genre de chose. Mais toute mes recherches sont restés infructueuses.
Si quelqu'un à une idée là dessus, je suis preneur (je planche sur ce problème depuis plusieurs mois)
Merci beaucoup
Snark.
# cli or not
Posté par nono14 (site web personnel) . Évalué à 1.
Essaie de ce côté.
Système - Réseau - Sécurité Open Source - Ouvert à de nouvelles opportunités
[^] # Re: cli or not
Posté par Snarky . Évalué à 2.
$ diff /etc/php5/apache2/php.ini /etc/php5/cli/php.ini
83c83
< short_open_tag = On
---
> short_open_tag = Off
270c270
< memory_limit = 32M ; Maximum amount of memory a script may consume (16MB)
---
> memory_limit = 128M ; Maximum amount of memory a script may consume (32MB)
451c451
< post_max_size = 8M
---
> post_max_size = 32M
# nohup
Posté par Kerro . Évalué à 2.
Fais un essai avec exec("nohup /usr/bin/appli --pipe=/tmp/monpipe");
[^] # Re: nohup
Posté par Snarky . Évalué à 2.
# shell
Posté par Krunch (site web personnel) . Évalué à 3.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
# pistes
Posté par Old Geek . Évalué à 3.
* As-tu simplement testé de lancé les scripts en ligne de commande depuis le même compte qu'apache ? (www-data ou autre)
* remarque concernant le code "un exec" pour un echo dans un pipe !, un peu "bourrin" non ;) ? ,
* quand tu dis "n'avais jamais pris le pipe", as-tu testé les codes retours des open/read etc du pipe ?
A+
Nicolas
# proc_open
Posté par xrogaan . Évalué à 1.
http://php.net/manual/fr/function.proc-open.php
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.