Patrick Andrieu: Mangelhafte Implementierung von Ausnahmen im Apache?

Hallo alle!

Ich berichte hier über Apache-Abstürze, die länger zurückliegen. Irgendwie vergaß ich immer, einen neuen Beitrag zu posten, der Fall liegt also wenige Wochen in der Vergangenheit - und so wichtig war es auch nicht, habe ich ja doch immer noch den Xitami für meine paar Tests.

Beim Apache-Start über mein Log-Rotate-Perl-Skript, aber auch ganz normal über das Xampp-Control-Panel, stürzte der Indianer nach wenigen Sekunden ab. Schuld war angeblich die libapr-1.dll (eine mitgelieferte Dynamic Link Library, zu finden unter /xampp/apache/bin).

Ich google mich einen Ast ab über diese Datei, finde einige, leider doch wenige Beiträge über Abstürze mit als Grund eben diese Datei - aber keine brauchbare Lösungsmöglichkeit.

Bis ich letztens etwas Zeit investierte, Xampp löschte und reinstallierte (vorher meine httpd.conf und httpd-vhosts.conf gesichert). Apache startete. Kopierte ich meine beiden Dateien wieder an ihren jeweiligen Ort, war der Indianer bockig und stürzte vom Pferd ab. Solele... dann mal langsam... erst die httpd.conf ohne die Virtuellen Hosts, siehe da, der Indianer wollte wieder. Und hier fiel der Groschen!

Meine Web-Dateien befanden sich alle auf eine externe Festplatte, die letztens den Geist aufgab. Somit stimmten die (Netzwerk-)Pfade in der httpd-vhosts.com nicht (die Festplatte war zuerst nicht ansprechbar, dann hatte ich sie schließlich entfernt).

Meine Frage an die Indianer-Kenner: Warum wird eine so einfache Ausnahme wie ein falscher, nicht mehr existierender oder wie-auch-immer-Pfad von der Software nicht abgefangen, und eine enstsprechende Meldung ausgegeben, bevor es zum Absturz kommt?

Wenn der Apache kostenpflichtig wäre, würde ich eine Rechnung schicken für gut einen halben Tag Google-Suche!

Viele Grüße aus Frankfurt/Main,
Patrick

--

_ - jenseits vom delirium - _
[link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
Nichts ist unmöglich? Doch!
Heute schon gegökt?
  1. Warum wird eine so einfache Ausnahme wie ein falscher, nicht mehr existierender oder wie-auch-immer-Pfad von der Software nicht abgefangen, und eine enstsprechende Meldung ausgegeben, bevor es zum Absturz kommt?

    Weil jemandem ein dummer Fehler unterlaufen ist. Sowas kann bei Software, an der viele in ihrer Freizeit arbeiten, hier und da mal passieren. Du tust gerade so, als wenn der Fehler Absicht gewesen wäre. Und ich behaupte jetzt einfach mal, dass der fehlerhafte Pfad nicht die Ursache, sondern nur der Auslöser war - denn so doof sind die Apache-Entwickler nicht. Mein Apache weigert sich auch ganz einfach zu starten, wenn eine wichtige Pfadangabe nicht stimmt.

    Wenn der Apache kostenpflichtig wäre, würde ich eine Rechnung schicken für gut einen halben Tag Google-Suche!

    Erwartest du jetzt eine Entschuldigung? Melde den Fehler, vergiss ihn oder nimm den IIS.

    1. Hallo Teufelchen!

      Und morgen antwortet mir Engelein? ;)

      Du tust gerade so, als wenn der Fehler Absicht gewesen wäre.

      Keineswegs. Es wundert mich halt, dass gerade Benutzereingaben in einer so wichtigen Datei wie die httpd.conf oder httpd-vhosts.conf, und solche Eingaben können ja immer Tippfehler enthalten, einfach nicht abgefangen werden. Stattdessen irritiert der Absturz und der Hinweis auf die libabr-1.dll (welcher aber nicht vom Apache kommt - der ist da schon tot - sondern von Windoof).

      Und ich behaupte jetzt einfach mal, dass der fehlerhafte Pfad nicht die Ursache, sondern nur der Auslöser war - denn so doof sind die Apache-Entwickler nicht.

      Das mag sein, mindert am Grund meiner Frage aber nichts: Warum wird sowas nicht abgefangen? Den Apache als Webserver gibt es doch nicht erst seit gestern, oder? Dass Fehlerhafte Pfadangaben zu Abstürzen führen, dürfte also lange bekannt sein, lange genug, dass man da ein Abfangen längst hätte implementieren können...

      Erwartest du jetzt eine Entschuldigung?

      Nein, aber eine Erklärung.

      Viele Grüße aus Frankfurt/Main,
      Patrick

      --

      _ - jenseits vom delirium - _
      [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
      Nichts ist unmöglich? Doch!
      Heute schon gegökt?
      1. Hallo Patrick,

        blöde Frage: Hast Du auch mal im error-log des Apache nachgeschaut? Bei Multi-Plattform-Geschichten ist es wohl immer etwas schwierig, an die richtige Stelle zu loggen, und es passiert mir auch öfter, dass ich Meldungen im Apache error-log finde, die ich auf der Konsole oder im Syslog erwartet hätte...

        Viele Grüße,
        Gero

        1. Hallo Gero!

          blöde Frage: Hast Du auch mal im error-log des Apache nachgeschaut? Bei Multi-Plattform-Geschichten ist es wohl immer etwas schwierig, an die richtige Stelle zu loggen, und es passiert mir auch öfter, dass ich Meldungen im Apache error-log finde, die ich auf der Konsole oder im Syslog erwartet hätte...

          Er konnte gar nichts rein schreiben, weil der ja vorher verstorben war ;)

          Beim Start über mein Skript läuft das so ab:

          • das Skript beendet den Apache (falls dieser vorher lief)
          • das Skript verschiebt error.log und access.log nach /logs/old
          • das Skript startet den Apache wieder, dieser legt access.- und error.log neu an
          • ...und benennt dann in aller Ruhe die eben nach /logs/old verschobenen Dateien um (nach einem im Skript vorgegebenen Muster)

          Beim Start über den Xampp-Panel bestehen ja schon access.log und error.log. Nur, wie eben gesagt, wenn die Pfade in der httpd-vhosts.conf falsch sind (weil wie bei mir die Platte ja kaputt war und somit unerreichbar), stürzt der Indianer ab, bevor er in die error-Log schreiben kann (eben getestet durch falsche Pfadangabe in httpd-vhosts.conf).

          Ich hatte natürlich zunächst gedacht, dass es an meinem Skript liegt - war aber nicht der Fall.

          Normalerweise legt der Apache beim Start eine Datei http.pid mit der PID-Nummer des apache.exe-Prozesses in /logs an, nur im Fall fehlerhafter Pfade in der httpd-vhosts.conf kommt er noch nicht einmal dazu.

          Viele Grüße aus Frankfurt/Main,
          Patrick

          --

          _ - jenseits vom delirium - _
          [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
          Nichts ist unmöglich? Doch!
          Heute schon gegökt?
  2. hallo Patrick,

    Kopierte ich meine beiden Dateien wieder an ihren jeweiligen Ort, war der Indianer bockig und stürzte vom Pferd ab. Solele... dann mal langsam... erst die httpd.conf ohne die Virtuellen Hosts, siehe da, der Indianer wollte wieder.

    Das Problem liegt vermutlich an einer anderen Stelle als du annimmst. Dein Script murkelt an den log-Dateien herum, verschiebt sie usw. Und _das_ verträgt der Apache unter Windows nicht (unter Linux geht es). Der Pfad zum Log muß korrekt sein - die Logdatei selbst muß nicht unbedingt existieren bei Apache-Start, aber das Verzeichnis, in dem sie liegen soll, muß existent sein.

    Meine Frage an die Indianer-Kenner: Warum wird eine so einfache Ausnahme wie ein falscher, nicht mehr existierender oder wie-auch-immer-Pfad von der Software nicht abgefangen, und eine enstsprechende Meldung ausgegeben, bevor es zum Absturz kommt?

    Du verallgemeinerst meiner Ansicht nach etwas, was du nur unter Windows beobachten kannst. Unter Windows kann der Indianer immer nur genau zwei Prozesse starten, und wenn einer davon nach /dev/nul geht, ist kein neuer mehr da, auf den ausgewichen werden könnte.

    Ich habe es mal nachzustellen versucht und die DocumentRoot für einen virtuellen Host auf einen nicht existenten Pfad gesetzt: siehe da, "meinen" stört es nicht weiter, solange es in der Liste überhaupt noch irgendeinen virtuellen Host gibt. Eine Veränderung des Ablageortes für das Log nimmt er aber übel.

    Grüße aus Berlin

    Christoph S.

    --
    Visitenkarte
    ss:| zu:) ls:& fo:) va:) sh:| rl:|
    1. Hallo Christoph!

      Das Problem liegt vermutlich an einer anderen Stelle als du annimmst. Dein Script murkelt an den log-Dateien herum, verschiebt sie usw. Und _das_ verträgt der Apache unter Windows nicht

      Warum? Der wird vom Skript vorher gestoppt, tot, Prozess gekillt, PID wieder frei. Ein Verschieben der Logs beim laufenden Apachen passiert nicht. Außerdem liegt am Skript, wie der DAU-Start über den Xampp-Panel beweist: Da stürzt der Häuptling auch vom Pferd.

      Der Pfad zum Log muß korrekt sein - die Logdatei selbst muß nicht unbedingt existieren bei Apache-Start, aber das Verzeichnis, in dem sie liegen soll, muß existent sein.

      Ist alles perfetto wie es sein soll.

      Ich habe es mal nachzustellen versucht und die DocumentRoot für einen virtuellen Host auf einen nicht existenten Pfad gesetzt: siehe da, "meinen" stört es nicht weiter,

      Meinen aber schon (siehe meine Antwort an Gero).

      solange es in der Liste überhaupt noch irgendeinen virtuellen Host gibt.

      Ich habe im Moment nur einen angelegt, bis meine Festplatte wieder da ist. Dann kommt die gesicherte httpd-vhosts.conf mit den Pfaden zur externen Festplatte wieder zum Einsatz.

      Eine Veränderung des Ablageortes für das Log nimmt er aber übel.

      Da gibt es aber keine. Die Logs sind in /xampp/apache/logs - wie gleich nach der Installation.

      Viele Grüße aus Frankfurt/Main,
      Patrick

      --

      _ - jenseits vom delirium - _
      [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
      Nichts ist unmöglich? Doch!
      Heute schon gegökt?
      1. Hallo Ingrid!

        Außerdem liegt am Skript,

        Ingrid wollte sagen: außerdem liegt es NICHT am Skript

        Viele Grüße aus Frankfurt/Main,
        Patrick

        --

        _ - jenseits vom delirium - _
        [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
        Nichts ist unmöglich? Doch!
        Heute schon gegökt?