apache führt bash-cgi-skript nicht korrekt aus

Alles, was den Apache betrifft, kann hier besprochen werden.

apache führt bash-cgi-skript nicht korrekt aus

Postby srellik » 13. May 2005 22:36

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
 
Posts: 2
Joined: 13. May 2005 22:34

Postby srellik » 14. May 2005 00:33

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 ???
srellik
 
Posts: 2
Joined: 13. May 2005 22:34

Postby deepsurfer » 17. May 2005 10:16

https://www.linux-magazin.de/Artikel/au ... nment.html


Kurz vor der hälfte des Textes kommen expliziete Beispiele für $ENV(env)

Vielelicht hilft das ein wenig weiter, da du das ganze Script nicht gepostest hast denke ich mir das deine HOME verzeichnis nicht deklariert wird und von daher kann die Variable nicht weiter verarbeitet werden.


Google Liste
chirio Deep
Wie sagte einst der MCP aus Tron auf dem Bildschirm zu schreiben Pflegte
" ... end of communication ... "
User avatar
deepsurfer
AF Moderator
 
Posts: 6440
Joined: 23. November 2004 10:44
Location: Cologne
Operating System: Win-XP / Win7 / Linux -Debian

Postby Wiedmann » 17. May 2005 10:38

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.

Ein Home-Verzeichnis werden nur richtige Benutzer haben. "nobody", unter dem wohl bei vielen die Scripte letztendlich laufen, zählt jedenfalls nicht dazu. Der andere Server setzt möglicherwiese suExec ein (Scripte werden unter deinem/richtigen User ausgeführt).
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany


Return to Apache

Who is online

Users browsing this forum: No registered users and 5 guests