[PHP] Überprüfen ob ein Programm offen ist

  • Hallo,
    ich habe zur Zeit einen Mumble Server auf meinem Raspi laufen, den ich aber nur manchmal an habe. Nun wollte ich eine (vom Raspi gehostete) Webseite machen, auf der stehen soll ob gerade:
    -Hamachi an ist
    und auch ob
    -Mumble an ist
    das ganz soll dann folgendermaßen ausgegeben werden:

    Code
    Der Raspberry Pi ist [b]AN[/b]
    Hamachi ist [b]AN[/b]
    Mumble ist [b]AUS[/b]


    Das mit dem Raspberry Pi erledigt sich von selbser, da die Webseite eh nur verfügbar ist, wenn der Raspi an ist. Mein Problem ist nun, kriegt man es hin mit PHP/HTML/JavaScript zu schauen, ob ein bestimmtes Programm auf dem Raspberry Pi gerade läuft?

    01010111 01100101 01110010 00100000 01100100 01100001 01110011 00100000 01101100 01101001 01100101 01110011 01110100 00100000 01101001 01110011 01110100 00100000 01100100 01101111 01101111 01100110

  • u.a. per shell_excec(). Prüfen ob dienst läuft und den output verbarbeiten.

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

  • Oh danke für die schnelle antwort, kannst du mir auch zufällig dabei ein bisschen weiterhelfen wie das dann geht?

    01010111 01100101 01110010 00100000 01100100 01100001 01110011 00100000 01101100 01101001 01100101 01110011 01110100 00100000 01101001 01110011 01110100 00100000 01100100 01101111 01101111 01100110

  • Doku ist was feines ;). Den laufenden Prozess kann man zum Beipspiel
    per

    Code
    ps aux |grep mumble|grep -v grep

    überprüfen. Wenn er läuft steht anschliessend in der Variable was drin.

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

  • Ja die Doku hab ich auch schon gelesen aber irgendwie nicht verstanden... :D und bei Hamachi mache ich dann das ganze mit

    Code
    ps aux |grep hamachi|grep -v grep

    machen, aha!


    Naja google hat mir verraten, dass diese

    Code
    ps -fC einprogramm


    Weise besser ist :D muss ich mal ausprobieren

    01010111 01100101 01110010 00100000 01100100 01100001 01110011 00100000 01101100 01101001 01100101 01110011 01110100 00100000 01101001 01110011 01110100 00100000 01100100 01101111 01101111 01100110

    Edited once, last by beecoopcool ().

  • Besser ist Ansichtssache, solange das Ergebnis stimmt ist doch der Weg egal ;).

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.


  • liefert die PID eines Prozesses. Da kann man sich den grep sparen.
    Also z.B.:

    Code
    $ pidof hamachi


    Ja, aber nicht nur die PID sondern wie ps auch, auch (... bzw. wenn man die PID nach /dev/null schickt, nur) den Rückgabewert 0 (positiv) oder 1 (negativ). Dann muss man nicht auf die/den PID/String prüfen, sondern auf den Rückgabewert 0 oder 1.

    The most popular websites without IPv6 in Germany.

  • Hallo zusammen,


    mit


    Code
    pidof prozessname


    arbeite ich schon seit geraumer Zeit.


    Dieses Linux-Kommando ist eine feine Sache, da es die Prozess-IDs des entsprechenden Programmes liefert.


    Wenn man ein Programm geschrieben hat, das ein anderes Programm aufruft, das dann aber abstürzt, hat das (Vater-)Programm die Möglichkeit, die abgestürzten Kindprozesse über kill zzgl. des pidof-Ergebnisses "abzuschiessen".


    Letztens habe ich eine Anwendung geschrieben, die gezeichnete Bilder (Pixel-Graphiken oder Bi-Level-Graphiken) direkt in Programm-Code umwandelt, diesen compiliert und ausführt. Das Ergebnis erscheint dann als eigenständiges Programm auf dem Bildschirm.


    Man kann dieses neue Programm entfernt dort beenden - oder über das Graphik-Programm über einen Button, der erscheint, sobald das neue Programm gestartet wurde.


    pidof wird sich durchsetzen, da bin ich mir sicher.



    Beste Grüsse


    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Edited once, last by Andreas ().

  • Habe selbst mehrere solcher Abfragen auf dem WebIf meines Pi laufen. Ich mach das immer mit pgrep, sieht dann so aus:


    PHP Teil:

    PHP
    <?php
    $output = array();
    $return_var = 0;
    exec("pgrep -c -x Programmname", $output3, $return_var3);
    ?>


    Im HTML Teil dann folgendes an gewünschter Stelle einfügen:

    PHP
    <?php
    if ($output[0] < 1)
    echo " <b>Status:</b> Programmname is not running! </br></br>";
    if ($output[0] > 0)
    echo " <b>Status:</b> Programmname is running and ready!</br></br>";
    ?>
  • Bei dem Code von driftmonster sehe ich leider ein paar Unstimmigkeiten - so wird zum Beispiel das zuvor gesetzt $output Array später garnicht mehr verwendet, das vorherige setzen von $output und $return_var ist aber auch überflüssig ;)
    Auch die anschließende Prüfung ist etwas seltsam..


    Es sollte eigentlich wie folgt aussehen:
    [code=php]
    $eRROR='';
    exec("pgrep -c -x Programmname", $output, $return_var);
    if ($return_var == "127") { $eRROR .= "<b>ERROR no such Script/Prog!</b><br/>\n"; }
    if (!empty($output)) { $eRROR .= "<br/>\n"; foreach ($output as $line) { $eRROR .= $line."<br/>\n"; } }
    if (!empty($eRROR)) { echo $eRROR; }
    [/php]



    Also ich bin ein Verfechter der altmodischen Methode über ps da man damit mehr machen kann ;)


    Habe in einem früheren, recht großen Projekt, ebenfalls eine Prozessprüfung in PHP eingebaut die dann via AJAX quasi in Echtzeit immer den aktuellen Status anzeigte sowie die Laufzeit des Prozesses... Aber übertreiben wirs hier erst mal nicht ;)



    Wenn du generell mehrere Prozesse überprüfen möchtest und ggf sogar eine Möglichkeit haben willst diese übers Webinterface neu zu starten usw, würde ich dir zum einen eine Forumsuche nach sudo webscript empfehlen und das zum Beispiel wie folgt umsetzen:
    (Buttons usw kannste dir da dann ja leicht einbaun)


    index.php


    processes_info.php


    Wie das aussieht kannst du dir hier angucken: http://RaspberryPI.RoXXs.org/ps/
    Rot --> Prozess läuft nicht
    Grün --> Prozess läuft



    PS: Ich hab das in 2 Dateien gesplittet damits übersichtlicher ist (wie ich finde). Du kannst die 2. Datei aber auch an passender Stelle in die erste copy&pasten, is relativ egal solange du kein AJAX nutzen willst ;)

  • Ah danke, das sieht ja schon gut aus ich weiss das klingt jetzt doof, aber wie mache ich das dann mit den Knöpfen zum Neustarten? Danke für eure Hilfe :-)

    01010111 01100101 01110010 00100000 01100100 01100001 01110011 00100000 01101100 01101001 01100101 01110011 01110100 00100000 01101001 01110011 01110100 00100000 01100100 01101111 01101111 01100110

  • Ich möchte ehrlich gesagt nicht alles vorkauen, ein bisschen solltest du schon selber machen - vorallem weil dann erst was gelernt wird ;)


    Frag Google wie man für HTML einen Button einbindet und benutz die Forumsuche nach sudo webscript - aus beidem solltest du dann eigentlich in der Lage sein eine Start/Stop/Restart Funktion selber einzubauen.


    Falls du dann noch Probleme haben solltest, helfe ich gerne - sofern ich sehe das Du auch bereit bist etwas für Dein Vorhaben zu tun :)

  • Hatte Langeweile und hab das mal für die Nachwelt zurecht gebastelt...



    index.php