PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie verwendet man passthru



Gorn
07-04-2003, 18:04
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

Gaert
07-04-2003, 18:20
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...

Gorn
07-04-2003, 18:55
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

Gaert
07-04-2003, 22:52
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:



$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:


//man beachte die Backticks!
echo nl2br(`/etc/rc.d/hlds`);



Hoffe das hilft jetzt ein wenig weiter.

Gorn
08-04-2003, 06:41
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

elrond
08-04-2003, 06:53
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.

Gorn
08-04-2003, 08:15
Ach so,

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


GoRn

elrond
08-04-2003, 08:28
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

Gorn
09-04-2003, 06:33
Hi,

bei mir gehen folgende beiden Szenarien nicht:



<?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

elrond
09-04-2003, 06:56
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 ?

Gorn
09-04-2003, 07:07
leider nein,

da liegt kein pid von dem script.

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



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.

elrond
10-04-2003, 08:17
und wenn du selbst an webfrontend ein "ps aux" machst ? ist der daemon dann zu sehen ?

Gorn
10-04-2003, 15:05
Ich habe es mal etwas eingeschränkt

1. Ich habe ein kleines Script geschrieben



#!/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:



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

elrond
10-04-2003, 16:29
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

mehlvogel
10-04-2003, 21:35
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.

Gorn
11-04-2003, 07:46
Hi,



if (preg_match("/hlds/",exec("ps aux|grep -v grep| grep hlds"))) {
echo "HLDS läuft!!";
}
?>



das oben geht :-) cool.

Jetzt bleibt mir nur noch herauszufinden, wie ich diesen Job:



SCREEN -d -m -S cstrike /usr/local/hlds/hlds_run -game cstrike +ip 217.172.186.110:27015 +map de_dust +maxplayers 16


der als Deamon gestartet wird beenden, starten und restarten kann.


GoRn

elrond
11-04-2003, 10:43
muss der denn im root account laufen ? kann ich mir kaum vorstellen...
versuch doch einfach mal das ding im selben account wie den Webserver laufen zu lassen. dann sollten auch start und stop funktionieren...

Gorn
11-04-2003, 13:09
@Elrond

klar muss der nicht als rcon laufen.

Auch wenn ich als wwwrun in der console das script abfrage sagt er mir ja HLDS up. Nur mit dem phpscript sagt er mit HLDS down.

Das kann doch dann nicht an den Rechten liegen oder?

GoRn

elrond
14-04-2003, 09:18
tut mir leid, da weiss ich auch nicht weiter. kann sein, dass screen da irgendwie zicken machte...

ich kanns auch nicht testen, da ich weder screen noch einen cs-server installiert habe:eek: