Michael: Mit Shell-CGI-Skript in error_log schreiben?

Hallo!

Ist es möglich, dass ein mittels CGI gestartetes bash-Skript in die error_log-Datei des Apache schreibt? Mit echo >> /dev/stderr blabla funktioniert es nicht.
Bei Perl scheint es möglich zu sein, wie genau läuft das da? Oder habe ich die Funktion von croak / carp falsch interpretiert?

Danke!

  1. hallo,

    Ist es möglich, dass ein mittels CGI gestartetes bash-Skript in die error_log-Datei des Apache schreibt?

    Prinzipiell ja. Ob es allerdings sinnvoll ist, bleibt zu überlegen.

    Mit echo >> /dev/stderr blabla funktioniert es nicht.

    STDERR ist die Standardausgabe, für die meines Wissens kein "Gerät", also "/dev/Gerätename" benötigt wird. Sie ist flüchtig, das heißt, da wird nichts gespeichert. Allerdings kannst du sie auslesen und die Daten speichern. Versuche erstmal, etwas in irgendein Testlog, beispielsweise /var/logs/testlog, einzutragen. Wenn das klappt, kannst du ja dann den tatsächlich gewünschten Log-Namen stattdessen einsetzen.

    Bei Perl scheint es möglich zu sein

    Solange es nur um das Auslesen und Abspeichern von Daten geht, kann ein Shell-Script eigentlich dasselbe tun wie Perl.

    Grüße aus Berlin

    Christoph S.

    1. Hi Christoph!

      Ist es möglich, dass ein mittels CGI gestartetes bash-Skript in die error_log-Datei des Apache schreibt?

      Prinzipiell ja. Ob es allerdings sinnvoll ist, bleibt zu überlegen.

      Warum sollte das nicht sinnvoll sein? Für eventuelles Debugging oder unerwartete Fehler ist dieses Vorgehen sehr wohl sinnvoll. Im Übrigen macht es dieses Forum mit den ganzen CGI-Programmen fo_view, fo_post, fo_arcview, etc. genauso.

      Mit echo >> /dev/stderr blabla funktioniert es nicht.

      STDERR ist die Standardausgabe, für die meines Wissens kein "Gerät", also "/dev/Gerätename" benötigt wird. Sie ist flüchtig, das heißt, da wird nichts gespeichert. Allerdings kannst du sie auslesen und die Daten speichern. Versuche erstmal, etwas in irgendein Testlog, beispielsweise /var/logs/testlog, einzutragen. Wenn das klappt, kannst du ja dann den tatsächlich gewünschten Log-Namen stattdessen einsetzen.

      Das ist leider falsch. STDERR ist die Standard_Fehler_Ausgabe, wohingegen STDOUT die Standardausgabe  darstellt. Mit sogenannten «Output Redirection» ist es demnach möglich einen entsprechenden Effekt zu erzielen:

      echo "Es trat ein Fehler im Skript $0 auf!" 1>&2

      Dadurch wird STDOUT (1) nach STDERR (2) umgelenkt und folgende Zeile erscheint dann im Error-Log des Apache:

      [Sat Jul 16 15:44:17 2005] [error] [client 192.168.0.21] Es trat ein Fehler im Skript test.cgi auf!

      Grüße,
      Fabian St.

      1. hallo Fabian,

        Ist es möglich, dass ein mittels CGI gestartetes bash-Skript in die error_log-Datei des Apache schreibt?
        Prinzipiell ja. Ob es allerdings sinnvoll ist, bleibt zu überlegen.
        Warum sollte das nicht sinnvoll sein?

        Die Apache-error_log ist für Fehlermeldungen da, die irgendwie mit dem Webserver zu tun haben bzw. für Fehler, die er selber vermeldet. Wir wissen nicht, was genau das Script protokollieren soll. Natürlich macht es Sinn, ein log oder sonstwas mitlaufen zu lassen und abzuspeichern, aber ob das tatsächlich in die error_log mit hineingeschrieben werden muß, ist zu überlegen.

        STDERR ist die Standardausgabe
        STDERR ist die Standard_Fehler_Ausgabe

        ok, richtig, hab ich zu schnell getippt, der Rest widerspricht meinen Aussagen ja nicht.

        Grüße aus Berlin

        Christoph S.

        1. Hi Christoph!

          Prinzipiell ja. Ob es allerdings sinnvoll ist, bleibt zu überlegen.
          Warum sollte das nicht sinnvoll sein?

          Die Apache-error_log ist für Fehlermeldungen da, die irgendwie mit dem Webserver zu tun haben bzw. für Fehler, die er selber vermeldet. Wir wissen nicht, was genau das Script protokollieren soll. Natürlich macht es Sinn, ein log oder sonstwas mitlaufen zu lassen und abzuspeichern, aber ob das tatsächlich in die error_log mit hineingeschrieben werden muß, ist zu überlegen.

          Naja, so eng würde ich das nicht sehen, immerhin stehen mögliche durch das Skript verursachte Fehler ja mit dem Webserver in Verbindung und oftmals sind solche Fehlermeldungen auch gar nicht für die Allgemeinheit bestimmt, sondern nur für den Server-Admin, sodass ein Schreiben in STDOUT unterlassen werden sollte.

          Das Pflegen einer seperaten Log-Datei halte ich persönlich für zu umständlich und außerdem hätte man in der error_log dann alles auf einen Blick dann zusammengefasst.

          Grüße,
          Fabian St.

      2. Hallo!

        Mit sogenannten «Output Redirection» ist es demnach möglich einen entsprechenden Effekt zu erzielen:

        echo "Es trat ein Fehler im Skript $0 auf!" 1>&2

        Danke für die Bestätigung, dass es so funktionieren müsste, wie ich mir das gedacht hatte. Ich die ganze Konstellation dann nochmals unter die Lupe genommen und das Problem auch woanders gefunden: Das CGI-Skript habe ich mit SSI-exec aufgerufen, da geht die Umleitung wohl nicht.

        Grüße,
        Michael