2016-07-15 11 views
2

Ich benutze Ratchet, eine Node js-Anwendung und ZeroMq in meiner codeigniter-basierten PHP-Anwendung.Überprüfen, ob Prozess läuft, wenn nicht starten

In meinem Admin-Dashboard möchte ich in der Lage zu sehen, ob der Socket ausgeführt wird und auch, wenn meine Knoten-Js-App ausgeführt wird. Wenn es nicht funktioniert, muss ich es wieder online stellen können.

Ich weiß, dass ich die exec von php verwenden kann, um es wieder online zu stellen, aber sobald das Skript beendet ist, tut es auch die Befehlszeile.

Wie kann ich das erreichen? Etwas wie:

Ratchet: Status online (Stopp, Start, Restart) Knoten Service: Status online (Stopp, Start, Restart) ZeroMq: Status online (Stopp, Start, Restart)

+1

können Sie klären, was Sie von 'bedeuten aber, sobald das Skript beenden, so auch der Befehl line.' – KFE

+0

ich meine, wenn Sie so etwas wie exec laufen ("Knoten Haupt.js"); wird es öffnen und schließen. Auch ich kann nicht kontrollieren, ob es läuft oder nicht –

Antwort

0

Ich habe versucht, eine Viele Lösungen einschließlich fsockopen(), um zu überprüfen, ob der Port offen ist ...

Aber die einzige funktionierende Lösung ist zu überprüfen, ob Knoten js Anwendungsprozess mit für Argument die Anwendungsdatei eingeschaltet ist. Wenn nicht, benutze ich exec, um es dauerhaft laufen zu lassen (mit & Argument) und die Ausgabe in eine Logdatei (im selben Ordner der Knoten-App).

$node  = '/usr/bin/node'; 
$base  = '/path/to/your/app'; 
$appfile = 'my_app.js'; 
$logfile = 'my_app.log'; 
$proc  = explode("\n", trim(shell_exec(" ps -ef | grep -v grep | grep $appfile"))); 
if ($proc[0] == '') { 
    exec("$node $base/$appfile >> $base/$logfile &"); 
} 

Es funktioniert gut und den Knoten Server nur einmal ausgeführt wird.

EDIT: Minimalist PHP-Code-Version:

if(trim(shell_exec('ps -ef | grep -v grep | grep app.js')))=='') { 
    exec('node /path/to/app.js >> /path/to/app.log &'); 
}