PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : apache führt bash-cgi-skript nicht korrekt aus



srellik
13.05.05, 22:21
hallo leute,

zuerst einmal einen gruß an alle, die hier immer so fleissig posten. Ich muss zugeben, das ich hier eigentlich bisher nur gelesen habe, aber bisher hat bei mir alles meist auf anhieb geklappt oder spätestens dank einer anleitung von hier oder einem anderen forum.

Jetzt allerdings habe ich ein Problem mit der ausführung eines bash-cgi-skriptes unter apache und hoffe hier eine lösung zu finden.
Die suchfunktion hat leider niemanden zutage gefördert, der das gleiche oder ein ähnliches problem beschrieben hat.
Das komische an der ganzen sache ist, das das skript korrekt ist, d.h. auf einer andern maschine läuft's.

Okay, jetzt zum eigentlichen:

- Apache ist korrekt konfiguriert, das ich cgi-skripte (perl,php,bash, kompilierte cgi's) ausführen kann
- das Skript wird von einer statischen html-seite aufgerufen
- dem skript werden mithilfe eines formulars 2 variablen übergeben
- das skript selbst nutzt zusätzlich noch die variable $REMOTE_USER
- die ganze geschichte läuft auf einer anderen maschine (gleicher apache 1.3.26, gleiche bash 2.05b.0) ohne probleme
- das skript läuft nach "su www-data" in der Komandozeile (variablen von Hand gesetzt) korrekt
- beim aufruf durch den webbrowser wird allerdings der alles entscheidende befehl nicht ausgeführt
- alle anderen ausprobierten shell-befehle wurden ebenfalls ausgeführt (z.B. ls -al oder sequentiell angezeigte geschichten wie apt-cache search *)

hier eine gekürtzte version (ohne den html-kram, nur mit dem shell-befehl, der probleme macht) des bash-skriptes.

#!/bin/bash
# ------------------------------------
# ----------Portstatus ---------------
# ------------------------------------

eval `/usr/lib/cgi-bin/dsl-manager/cgiparse -form` # Um QUERY_STRING auszulesen

printf "Content-Type: Text/html\n\n";
printf "\n\n";
ls
printf "\n\n";
/usr/local/rancid/bin/clogin -f /home/$REMOTE_USER/.cloginrc -c "sh int $FORM_ATMPORT" $FORM_DSLAM | perl -pe "$|=1"
printf "/usr/local/rancid/bin/clogin -f /home/$REMOTE_USER/.cloginrc -c \"sh int $FORM_ATMPORT\" $FORM_DSLAM | perl -pe \"$|=1\"";

die zeile mit "clogin ...." ist das problem.
Zur kontrolle ob das Skript soweit läuft sehe ich, da nach aufruf durch den Browser, die ausgabe von "ls" erscheint und danach die ausgabe des printf-befehls in der letzten zeile (um zu testen, ob das kommando aufgrund der variablen richtig zusammengesetzt wird --> es wird richtig zusammengesetzt).
Aber dazwischen, wo also die Ausgabe des befehls stehen sollte erscheint nix. auch im apache-error-log ist nix zu sehen.

Jetzt meine Fragen:
-Kann mir jemand helfen ???
-gibts in der httpd.conf eine möglichkeit ein "skript-logging" einzustellen, so das ich neben access.log, error.log, zuätzlich z.B. noch cgi.log habe ???
-kennt jemand eine andere möglichkeit, als die meinige, mit der man mein problem vielleicht geschickt umgehen könnte (ich will aber auf jeden fall, das jede ausgabe des programms sofort erscheint und nicht erst in einer datei gespeichert wird, da eventuell die ausführung des programms bis zu 10 sek dauern kann und in dieser zeit in unregelmässigen abständen was ausspuckt)???

Ich hoffe ihr könnt mir nen guten tip geben.
danke im voraus
alex

srellik
14.05.05, 00:32
Hi,

habe in einem anderen Forum den Tip bekommen mal "exec 2>&1" vor den Befehl zu setzen.
Das hat mich dann auf die Spur gebracht.
denn mit dieser geschichte hat mit das programm "clogin" einen fehler ausgepuckt, es könne die Variable $ENV(HOME) nicht finden. Dies war auf der anderen Maschine dann wohl nict der fall.

habe diese stelle nun im code auskommentiert (ist in expect geschrieben), da ich eh nen parameter angebe, der die Umgebungsvariable anscheinend nicht benötigt, denn danach lief's.
aber eigentlich dachte ich, die systeme wären gleich???.
Habe ich eventuell auf der einem maschine ein Problem mit meinen umgebungsvariablen ???