PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : skript mit sudo aus php aufrufen - fehlermeldung "[ too many arguments"



benni1000
13-09-2004, 09:00
Hallo zusammen!
Ich habe mir gestern für den einwahlserver ein skript geschrieben, daß erstens ein paar dateien untersucht, ob eine 0 oder 1 drinne steht.


#!/bin/bash
$andre='more /tmp/192.168.0.1'
$roman='more /tmp/192.168.0.2'

if [ $roman = "0" ] ; then
echo "Roman ist offline"
else
echo "Roman ist online"
fi

if [ $andre = "0" ] ; then
echo "Andre ist offline"
else
echo "Andre ist online"
fi

if [ $andre = "0"] ||[$roman = "0" ] ; then
gooffline
else
goonline
fi

In der konsole ausgeführt klappt das prima. Wenn ich das ding über ein php-skript, wegen der rechte in sudo aufrufe kann ich im apache: error_log sehen, daß er den Fehler
"[ too many arguments"
ausgibt.
Jetzt frage ich erst mich und jetzt euch, warum das so ist!!!
Danke
Benni

elrond
13-09-2004, 11:19
wie sieht denn dein Aufruf von php aus?

benni1000
13-09-2004, 11:26
passthru("sudo online.sh"); oder system(...);
Benni

elrond
13-09-2004, 11:34
ich hrbeite selbst nicht mit sudo, gehe bei ähnlichen Probs aber wie folgt vor:

1. ab auf die Linux-shell
2. su wwwrun
3. befehl genauso ausführen wie er übergeben wird "online.sh"

mögliche Fehler entstehen häufig durch unvollständige Referenzierung des aufzurufenden programms bzw. der als param übergebenen Datei "/usr.../sudo ./test.sh" ... "./test.sh" anstelle "test.sh"

ich würde damit ein wenig rumprobieren...

elrond
13-09-2004, 12:00
ggf. ist ja das hier eine hilfe Link (http://www.courtesan.com/sudo/man/sudo.htm)

benni1000
13-09-2004, 12:35
... funktioniert ja die Ausgabe genau::

echo "Andre online<br>"
Das erscheint ja auch im Browserfenster (Andre online).
Aber es erscheint eben immer, egal was in der abfrage if ... passiert, weil php->sudo scheinbar garnicht mit den eckigen klammern zurecht kommt - aber warum? Warum kann es in der shell so ausgeführt werden und mit sudo nicht?
Absolut referenziert habe ich sie auch: also angefangen mit "/usr/...".
Ich bin ja auch schon so direkt online und offline gegangen:

passthru("/usr/bin/goonline");
Ich raff's einfach nicht. Die Fehlermeldung in der errors_log ist da recht eindeutig. So habe ich ja auch sudo konfiguriert: Es war genau zu erkennen, woran es lag - die Fehlermeldungen erscheinen also definitiv in der log-datei.
Benni

elrond
13-09-2004, 12:53
... funktioniert ja die Ausgabe genau::

echo "Andre online<br>"
Das erscheint ja auch im Browserfenster (Andre online).

Das erstaunt mich nicht, da es nichts mit der shell zu tun hat...

Poste doch einfach mal deinen php-code, dann kann man besser drüber nachdenken.

Wenn's an der Configuration von sudo liegen sollte, bist du
dort (http://www.linuxforen.de/forums/index.php) gut aufgehoben.

benni1000
13-09-2004, 13:08
... gibts da eigentlich nicht:
sinngemäß - da ich bis morgen abend nicht mehr an den server komme:


if $command == "verbinden"
passthru("echo 1 > /tmp/$_SERVER[REMOTE_IP]");

if $command == "trennen"
passthru("echo 0 > /tmp/$_SERVER[REMOTE_IP]");

passthru("sudo /usr/bin/online.sh");

Habe mich gerade auch mal in der sudo - Mailingliste gemeldet. Mal sehen was von dort aus kommt! Ich denke es liegt am sudo. Aber ich dachte hier weiß vielleicht jemand über solche Probleme bescheid.
Benni

elrond
13-09-2004, 14:20
wenn die anderen passthru-Anweisungen funktionieren liegt's wahrscheinlich am sudo...

sorry, war nur ein Versuch

alternativ zum sudo könntest du doch die Datei direkt in php auslesen. Dann hast du's mit einer Komponente weniger zu tun...

mit file() bzw. fopen(),fread() usw. kannst du die Datei einlesen und dann den Inhalt auswerten...

andererseits ist's sicherlich spannend zu wissen warum es mit sudo nicht will...

benni1000
13-09-2004, 21:29
... denn mit cat funktioniert es super. Die sudo - Mailing-List hat mir geholfen. Trozdem auch Danke nach hier her!
Benni