Anzeige:
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 19

Thema: Wie verwendet man passthru

  1. #1
    Registrierter Benutzer
    Registriert seit
    31.01.2001
    Ort
    Solingen
    Beiträge
    47

    Wie verwendet man passthru

    ich möchte eine Datei starten und von dieser die Anwort auslesen, weiss aber leider nicht wie man passthru verwendet. Kann mir einer helfen?

    $cs_demon='/etc/rc.d/hlds';
    int passthru ( $cs_demon." status" [$status]);
    print "$status";


    GORn
    ~~~~~~~~~~~~~~~
    Ubuntu
    Gnome
    ~~~~~~~~~~~~~~~

  2. #2
    Registrierter Benutzer Avatar von Gaert
    Registriert seit
    09.05.2002
    Ort
    Nußloch
    Beiträge
    1.317
    Hallo!

    Schonmal ins Manual geschaut?

    http://www.php.net/manual/de/function.passthru.php

    Da wird unter anderem erwähnt, dass passthru nicht die optimale Wahl für dein Vorhaben ist...


  3. #3
    Registrierter Benutzer
    Registriert seit
    31.01.2001
    Ort
    Solingen
    Beiträge
    47
    Hi,

    ich hatte es gelesen, aber ich kann den syntax nicht umsetzen.
    Die besser Wahl wäre wohl. exec... kannst Du mir sagen wie man den z.B. verwendet


    string exec ( string befehl [, array ausgabe [, int return_var]])


    $cs_demon='/etc/rc.d/hlds';
    string exec ( $cs_demon." status" [int $status]);
    print "$status";



    GoRn
    ~~~~~~~~~~~~~~~
    Ubuntu
    Gnome
    ~~~~~~~~~~~~~~~

  4. #4
    Registrierter Benutzer Avatar von Gaert
    Registriert seit
    09.05.2002
    Ort
    Nußloch
    Beiträge
    1.317
    Ah... ok, sorry!

    Ich schätze, du willst die Ausgabe der shell direkt an den Browser zurückliefern, oder?
    Dann check mal, ob bei dir der Save Mode in der php.ini aktiviert ist.
    Falls ja musst du den /etc/rc.d/ beim save_mode_path hinzufügen, da dort sonst nichts ausführen kannst. Wenn es dein eigener Server ist, kannst du den Save Mode im prinzip auch ganz deaktivieren, dann kansst du auch mit shell_exec() oder den Backticks arbeiten.

    Zur Verwendung:

    PHP-Code:
    $cs_demon='/etc/rc.d/hlds';
    exec$cs_demon." status",$result);

    //$result ist ein Array...
    foreach($result as $res) {
    //Element ausgeben
    echo $res "<br />";

    Alternativ bei Save Mode off:
    PHP-Code:
    //man beachte die Backticks!
    echo nl2br(`/etc/rc.d/hlds`); 
    Hoffe das hilft jetzt ein wenig weiter.
    Geändert von Gaert (08-04-2003 um 08:21 Uhr)


  5. #5
    Registrierter Benutzer
    Registriert seit
    31.01.2001
    Ort
    Solingen
    Beiträge
    47
    Hi,

    also in der PHP.ini ist der Savemode aus.

    Ich teste mit dem exec, ob ein Demon läuft oder nicht.
    In der Console bekomme ich die Antwort das der Demon up ist.

    Mit dem exec bekomme ich:


    HLDS is DOWN


    HLDS is Down - der Demon soll down sein. Ist er aber nicht.
    Weisst Du woran das liegen könnte?

    Ach ja, schonmal vielen Dank bislang hat du mir echt geholfen.

    GoRn
    ~~~~~~~~~~~~~~~
    Ubuntu
    Gnome
    ~~~~~~~~~~~~~~~

  6. #6
    Registrierter Benutzer Avatar von elrond
    Registriert seit
    03.10.2001
    Ort
    potsdam
    Beiträge
    881
    versuch dein script einfach mal under dem accout des webservers laufen zu lassen. mittels "su wwwrun" (bei mir heisst der so) und dann führtst du einfach mal dein script aus. das sollte das selbe ergebnis wie am browser bringen.
    "Um die Welt zu ruinieren, genügt es, wenn jeder seine Pflicht tut." (Winston Churchill)

  7. #7
    Registrierter Benutzer
    Registriert seit
    31.01.2001
    Ort
    Solingen
    Beiträge
    47
    Ach so,

    ah... na klar. Ich müsste also ein Script schreiben dass den Status als root abfragt. Ist das nicht sehr risikoreich?


    GoRn
    ~~~~~~~~~~~~~~~
    Ubuntu
    Gnome
    ~~~~~~~~~~~~~~~

  8. #8
    Registrierter Benutzer Avatar von elrond
    Registriert seit
    03.10.2001
    Ort
    potsdam
    Beiträge
    881
    ist natürlich nicht so schön, das als root zu machen.

    Die frage ist, ob das wirklich nötig ist. ich hab's gerade mal mit mysql als wwwrun getestet.

    Suse hat dazu ein script mitgegeben "rcmysql". Ich kann das ding (wenn ich den pfad angebe) aufrufen und bekomme eine vernünftige ausgabe.

    /usr/sbin/rcmysql status

    also sollte das auch mit deinem script gehen.

    wenn nicht legen die daemon überprüfbare dateien an. bei mysql sind das

    /var/lib/mysql/mysql.sock
    /var/lib/mysql/mysqld.pid

    so etwas sollte dein deamon eigentlich auch tun. Anhand dieser files kannst du feststellen, ob das ding läuft
    "Um die Welt zu ruinieren, genügt es, wenn jeder seine Pflicht tut." (Winston Churchill)

  9. #9
    Registrierter Benutzer
    Registriert seit
    31.01.2001
    Ort
    Solingen
    Beiträge
    47
    Hi,

    bei mir gehen folgende beiden Szenarien nicht:

    PHP-Code:
    <?php
    $cs_demon
    ='/etc/rc.d/';
    exec($cs_demon."su wwwrun hlds status",$result);
    //$result ist ein Array...
    foreach($result as $res) {
    //Element ausgeben
    echo $res "<br />";
    }
    ?>
    <?php
    $cs_demon
    ='/etc/rc.d/';
    exec($cs_demon."su wwwrun mysql status",$result);
    //$result ist ein Array...
    foreach($result as $res) {
    //Element ausgeben
    echo $res "<br />";
    }
    ?>
    Beide ergeben keine Daten. In der Console klappt es aber. HLDS ist im übrigen eine Script, das per screen eine Programm startet.
    Mein Ziel ist, das Programm mit status abzufragen und wenn es nicht läuft mit restart zu starten.

    GoRn
    ~~~~~~~~~~~~~~~
    Ubuntu
    Gnome
    ~~~~~~~~~~~~~~~

  10. #10
    Registrierter Benutzer Avatar von elrond
    Registriert seit
    03.10.2001
    Ort
    potsdam
    Beiträge
    881
    wenn nicht legen die daemon überprüfbare dateien an. bei mysql sind das

    /var/lib/mysql/mysql.sock
    /var/lib/mysql/mysqld.pid

    so etwas sollte dein deamon eigentlich auch tun. Anhand dieser files kannst du feststellen, ob das ding läuft
    wie steht's damit ?
    "Um die Welt zu ruinieren, genügt es, wenn jeder seine Pflicht tut." (Winston Churchill)

  11. #11
    Registrierter Benutzer
    Registriert seit
    31.01.2001
    Ort
    Solingen
    Beiträge
    47
    leider nein,

    da liegt kein pid von dem script.

    Ich denke es liegt am Script denn wenn ich status von mysql abfrage geht es:

    PHP-Code:
    exec($cs_demon."mysql status",$result); 
    Checking for service MySQL: 7 running8

    Das Script startet HLDS allerdings so:

    screen -d -m -S $NAME $DAEMON $PARAMS

    Das Srcipt startet das Programm mit root Rechten als screen - Daemon.
    Im script wird wie folgt der status geprüft:

    ps aux | grep -v grep | grep hlds_r > /dev/null

    das scheint nicht über das Webinterface zu gehen.
    ~~~~~~~~~~~~~~~
    Ubuntu
    Gnome
    ~~~~~~~~~~~~~~~

  12. #12
    Registrierter Benutzer Avatar von elrond
    Registriert seit
    03.10.2001
    Ort
    potsdam
    Beiträge
    881
    und wenn du selbst an webfrontend ein "ps aux" machst ? ist der daemon dann zu sehen ?
    "Um die Welt zu ruinieren, genügt es, wenn jeder seine Pflicht tut." (Winston Churchill)

  13. #13
    Registrierter Benutzer
    Registriert seit
    31.01.2001
    Ort
    Solingen
    Beiträge
    47
    Ich habe es mal etwas eingeschränkt

    1. Ich habe ein kleines Script geschrieben

    Code:
    #!/bin/sh
    ps aux | grep -v grep | grep hlds_r > /dev/null
       CHECK=$?
       [ $CHECK -eq 0 ] && echo "HLDS is UP" || echo "HLDS is DOWN"
    exit 0
    mit dem Consolencommand ./status kommt HLDS UP.

    ich habe die Datei chmod 777 geändert.

    Dann mit PHP:

    PHP-Code:
    system("./status",$result);
    echo 
    "Resultat: $result<br>\n"
    Lustiger weise ist das Resultat: HLDS is DOWN Resultat: 0

    So, ich habe mir gedacht das stimmt was nicht. Meine PHP Version ist leider was älter...PHP Version 4.0.6 <-- kann es daran liegen?


    GoRn
    ~~~~~~~~~~~~~~~
    Ubuntu
    Gnome
    ~~~~~~~~~~~~~~~

  14. #14
    Registrierter Benutzer Avatar von elrond
    Registriert seit
    03.10.2001
    Ort
    potsdam
    Beiträge
    881
    PHP-Code:
    if (preg_match("/mysqld/",exec("ps aux|grep -v grep| grep mysql"))) {
        echo 
    "MySQL läuft!!";
        } 
    das läuft bei mir , sollte auch mit einem anderen prozess gehen...

    ich betreibe auch die 4.0.6
    "Um die Welt zu ruinieren, genügt es, wenn jeder seine Pflicht tut." (Winston Churchill)

  15. #15
    Registrierter Benutzer
    Registriert seit
    02.12.2002
    Ort
    Darmstadt
    Beiträge
    615
    Nur ne kleine Anmerkung, das beim Aufruf mit system() $result 0 war, liegt daran, das in den zweiten Parameter nicht die Ausgabe, sondern die Rückgabe des Programmes gespeichert wird (da du mit exit 0 aus dem Script gehst ==> $result = 0). Die Ausgabe lässt sich bei system() glaub ich nicht unterdrücken.
    Seine Rätselhaftigkeit wird nur durch seine Macht übertroffen!

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •