Starten eines Daemons aus PHP

8

Für eine Website muss ich einen Daemon-Prozess starten und stoppen können. Was ich gerade mache ist

%Vor%

Der Daemon-Prozess wird gestartet, aber Apache / PHP hängt. Doing a ps aux enthüllte, dass sich sudo selbst in einen Zombie-Prozess verwandelte, wodurch alle weiteren Fortschritte effektiv zunichte gemacht wurden. Ist das normal, wenn man versucht, einen Daemon aus PHP zu starten?

Und ja, Apache hat das Recht, den Befehl /etc/init.d/daemonToStart auszuführen. Ich habe die Datei / etc / sudoers geändert, um dies zu ermöglichen. Nein, ich habe nicht zugelassen, dass Apache in der Lage ist, irgendeine Art von Befehl auszuführen, nur ein paar wenige, damit die Website funktionieren kann.

Wie auch immer, zurück zu meiner Frage, gibt es eine Möglichkeit, PHP zu erlauben, Daemons so zu starten, dass kein Zombie-Prozess erstellt wird? Ich frage das, denn wenn ich das Gegenteil mache, funktioniert das Stoppen eines bereits gestarteten Daemon gut.

    
ThaMe90 05.12.2011, 14:47
quelle

3 Antworten

10

Versuchen Sie, > /dev/null 2>&1 & an den Befehl anzuhängen.

Also das:

%Vor%

Nur für den Fall, dass Sie wissen wollen, was es tut / warum:

  • > /dev/null - STDOUT nach / dev / null umleiten (mit anderen Worten: blackhole)
  • 2>&1 - STDERR zu STDOUT umleiten (auch blackhole)
  • & detachiere den Prozess und starte ihn im Hintergrund
DaveRandom 05.12.2011, 14:52
quelle
2

Ich hatte das gleiche Problem.

Ich stimme DaveRandom zu, du musst jede Ausgabe unterdrücken (stdout und stderr). Aber keine Notwendigkeit, in einem anderen Prozess mit der Endung ' & ' zu starten: Die Funktion exec () kann den Rückgabecode nicht mehr überprüfen und gibt OK zurück, selbst wenn ein Fehler aufgetreten ist ...

Und ich bevorzuge es, Ausgaben in einer temporären Datei zu speichern, anstatt "blackhole". Arbeitslösung:

%Vor%

Lesen Sie den Dateiinhalt nach und löschen Sie die temporäre Datei:

%Vor%     
Worst 12.06.2014 12:34
quelle
0

Ich habe noch nie versucht, einen Daemon aus PHP zu starten, aber ich habe versucht, andere Shell-Befehle auszuführen, mit vielen Schwierigkeiten. Hier sind ein paar Dinge, die ich in der Vergangenheit versucht habe:

  • Gemäß DaveRandoms Antwort fügen Sie /dev/null 2>&1 & an das Ende Ihres Befehls an. Dadurch werden Fehler zur Standardausgabe umgeleitet. Sie können diese Ausgabe dann zum Debuggen verwenden.
  • Stellen Sie sicher, dass der PATH Ihres Webserver-Benutzers alle referenzierten Binärdateien in Ihrem Daemon-Skript enthält. Sie können dies tun, indem Sie exec('echo $PATH; whoami;) aufrufen. Dies sagt Ihnen, unter welchem ​​Benutzer PHP läuft, und es ist die aktuelle PATH-Variable.
WilHall 05.12.2011 14:58
quelle

Tags und Links