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
Druckbare Version
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
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...
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
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:
Alternativ bei Save Mode off: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 />";
}
Hoffe das hilft jetzt ein wenig weiter.PHP-Code:
//man beachte die Backticks!
echo nl2br(`/etc/rc.d/hlds`);
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:
[H[JHLDS 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
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.
Ach so,
ah... na klar. Ich müsste also ein Script schreiben dass den Status als root abfragt. Ist das nicht sehr risikoreich?
GoRn
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
Hi,
bei mir gehen folgende beiden Szenarien nicht:
Beide ergeben keine Daten. In der Console klappt es aber. HLDS ist im übrigen eine Script, das per screen eine Programm startet.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 />";
}
?>
Mein Ziel ist, das Programm mit status abzufragen und wenn es nicht läuft mit restart zu starten.
GoRn
wie steht's damit ?Zitat:
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
leider nein,
da liegt kein pid von dem script.
Ich denke es liegt am Script denn wenn ich status von mysql abfrage geht es:
Checking for service MySQL: 7 [80C[10D[1;32mrunning[m8PHP-Code:
exec($cs_demon."mysql status",$result);
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.
und wenn du selbst an webfrontend ein "ps aux" machst ? ist der daemon dann zu sehen ?
Ich habe es mal etwas eingeschränkt
1. Ich habe ein kleines Script geschrieben
mit dem Consolencommand ./status kommt HLDS UP.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
ich habe die Datei chmod 777 geändert.
Dann mit PHP:
Lustiger weise ist das Resultat: HLDS is DOWN Resultat: 0PHP-Code:
system("./status",$result);
echo "Resultat: $result<br>\n";
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
das läuft bei mir , sollte auch mit einem anderen prozess gehen...PHP-Code:
if (preg_match("/mysqld/",exec("ps aux|grep -v grep| grep mysql"))) {
echo "MySQL läuft!!";
}
ich betreibe auch die 4.0.6
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.