Wie kann ich verhindern, Supervisor Prozessen ( process control system ) aus einem PHP script Supervisor ist die Verwaltung?
Ich bin Parallelisierung ein PHP-Skript mit Supervisor. Wenn mein script bekommt eine bestimmte Antwort aus der Datenbank, führt er ein Befehl zum beenden aller Prozesse, die unter Steuerung durch die Supervisord daemon mit supervisorctl
. Hier ist der Befehl:
//gracefully stop all processes in supervisor's group called processes
$cmd = 'sudo /usr/bin/supervisorctl stop processes:*';
exec( $cmd, $outputs );
Das problem ist, dass dieser Befehl scheint keine Auswirkungen haben, wenn ausgelöst, in einem PHP-Skript unter Aufsicht Steuern. Warum?
Wenn ich starte diese Gruppe der Laufenden Prozesse innerhalb Supervisor, und dann lösen Sie eine weitere Instanz des Skript direkt von der Kommandozeile aus, es funktioniert und alle Betreuer Prozesse beendet sind.
Was ist Los? Kann daemonisierte PHP-Skripte nicht exec()
shell-Befehle?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich überprüft, Supervisor log-Dateien gefunden und die Fehlermeldung "sorry, Sie müssen haben a tty to run sudo." Aus dem, was ich-Figur, das ist passiert, weil die Vorgesetzten daemonisierte meine PHP-Skripte. Wegen der Sicherheit von Linux, ich bin nicht erlaubt, auf Befehle mit sudo aus einem daemonisierte Prozess.
War die Lösung zum ausführen von Supervisor wie der aktuelle Benutzer, die nicht standardmäßig, es sei denn, Sie führen es mit dem sudo Befehl, wie ich getan hatte (
sudo /usr/bin/supervisord
). Ich Tat dies, weil meine Skripte haben nicht alle Zugriff, die Sie zur Ausführung benötigt ( ich denke, ich war faul vor langer Zeit, als ich mein Prozess ).Nach der Befestigung dieser, die ich starten konnte, Supervisor, ohne mit dem sudo-Befehl (
/usr/bin/supervidord
), und dann habe ich nicht brauchen, um ausführen supervisorctl (/usr/bin/supervisorctl
) mit sudo, es zu kontrollieren, so lösen das Grundproblem nicht in der Lage, aufrufen sudo aus einem daeomonized Prozess.