Pour un site Web, j'ai besoin de pouvoir démarrer et arrêter un processus de démon. Ce que je fais actuellement est le processus de démon est démarré, mais Apache / PHP est suspendu. Faire un et oui, Apache a le droit d'exécuter la commande De toute façon, retour à ma question, est-il un moyen d'autoriser PHP Démarrer des démons d'une manière dont aucun processus de zombie n'est créé? Je demande cela parce que lorsque je fais l'inverse, arrêtez un démon déjà démarré, fonctionne juste bien. P> p> PS AUX CODE> a révélé que
sudo code> s'est transformé en un processus de zombie, tuant efficacement tous les autres progrès. Est-ce que ce comportement normal en essayant de démarrer un Daeomon à partir de PHP? P>
/etc/init.d/daemontostart code>. J'ai modifié le fichier / etc / sudoers pour lui permettre de le faire. Non, je n'ai pas autorisé Apache d'être capable d'exécuter un ordre de commandement, juste un peu limité pour permettre au site Web de travailler. P>
3 Réponses :
Essayez Ajout Donc, donc ceci: p> juste au cas où vous Voulez-vous savoir ce qu'il fait / pourquoi: p> > / dev / null 2> & 1 & code> à la commande.
> / dev / null code> - Rediriger stdout à / dev / null (Blackhole It, en d'autres termes) Li>
2> & 1 code> - rediriger stardr to stdout (Blackhole aussi bien) li>
& code> Détachez le processus et exécutez en arrière-plan li>
ul> p>
Merci pour l'explication plus poussée, mais parce que la sortie est blackhed, tout code qui aurait dû être exécuté après le démarrage du démon, est surviennent à ASWELL. Je dois vérifier si le processus a commencé, mais ce code n'est jamais tiré ...
Lorsque vous démarrez un processus en utilisant cette méthode, il devrait émettre le PID du processus créé. Vous pouvez prendre cela, puis (par exemple) exécuter ps | grep $ pidofprocessyoujuststarted code> pour vous assurer qu'il fonctionne.
En fait, vous pourriez simplement exécuter ps | grep /etc/init.d/daemontostart code> Pour faire la même chose ...
Je sais que je le fais déjà. ;) Il semblait que ce code n'a jamais été exécuté, car mon navigateur ne m'a pas présenté une alerte avec la valeur de résultat que j'ai présentée. Mais mes journaux montrent que le code est en train d'être exécuté. Alors merci encore.
Je n'ai jamais essayé de démarrer un démon de PHP, mais je avez em> essayé d'exécuter d'autres commandes shell, avec beaucoup de problèmes. Voici quelques choses que j'ai essayées, dans le passé: p>
/ dev / null 2> & 1 & code> à la fin de votre commande. Cela redirigera les erreurs de sortie standard. Vous pouvez ensuite utiliser cette sortie pour déboguer. Li>
EXEC ('echo $ path; whoami;) code>. Cela vous indiquera que l'utilisateur PHP fonctionne sous et sa variable de chemin actuelle. LI>
ul>
J'ai eu le même problème.
Je suis d'accord avec Daverandom, vous devez supprimer chaque sortie (stdout et stardr). Mais pas besoin de lancer dans un autre processus avec la fin " et je préfère stocker des sorties dans un fichier temporaire, au lieu de "Blackhole".
Solution de travail: P> & code> ': la fonction EXED () ne peut plus vérifier le code de retour et retourne ok même s'il y a une erreur ... p>
$output = explode("\n", file_get_contents($temp));
@unlink($temp);
Ne devrait-il pas y avoir de
Démarrer code> argument?
Vrai, j'ai oublié d'ajouter ça à la question. Dans mon code, je l'avoir. Mais je vais éditer la question de la complétude.