Sven: Apache soll monatlich einen neuen Log anfangen

Hallo,

der Apache(2) kann ja Logs sogar per Pipe (oder wie das heißt) an ein programm "schicken". Klingt ganz gut, das könnte dann nämlich alles erforderliche machen - wunderbar.

Nur habe ich nicht so viel Ressourcen, um ein weiteres Programm laufen zu lassen, das genau sowas macht. Ich meine, es würde ja immer, wenn der Apache läuft, auch laufen, und das ist ungünstigt, da ich sowieso bei RAM schon sehr knapp bei Kasse bin und bei jedem MB sparen muss.

Meine Frage also: Gibt es eine Möglichkeit, den Apachen _ohne Zusatzprogramme oder externe Programme_ dazu zu bewegen, monatlich einen neuen Log anzufangen?

Das ganze läuft (noch)[1] unter Win(2k)-Umgebung. Ich könnte entsprechend auch monatlich ein programm aufrufen (lassen), dass die gemachten Log-Einträge in irgendeiner externen datei speichert und die logdatei des apachen leert, während der Apache am laufen ist. Angeblich.

Was kann ich also tun?

Grüße,

Sven

[1] Es hat halt immernoch keiner eine Hand voll Ram, ne Festplatte, usw. - was man alles halt so braucht, für nen kleinen 2.pc für mich übrig ;(

--
!:        I'm back!
Selfcode: ie:% fl:| br:^ va:{ ls:& fo:) rl:( n4:( ss:) de:> js:| ch:° mo:} zu:}
Encode:   http://forum.de.selfhtml.org/cgi-bin/selfcode.pl
Decode:   http://peter.in-berlin.de/projekte/selfcode/
E-Mail:   coming soon
me:       'd comed long ago
  1. Moin!

    Meine Frage also: Gibt es eine Möglichkeit, den Apachen _ohne Zusatzprogramme oder externe Programme_ dazu zu bewegen, monatlich einen neuen Log anzufangen?

    Nö, da ist nichts eingebaut, wenn ich richtig informiert bin.

    Die übliche Vorgehensweise ist, einmal im Monat (oder wann auch immer man das wünscht) die existierenden Logfiledateien durch ein kleines Skript umzubenennen und dann den Apache neu zu starten. Dadurch legt er seine Logfiles neu an, und die sind dann leer.

    Die alten Logfiles kann man dann prima gzippen oder auswerten oder wegmailen - je nach Wunsch.

    Üblicherweise wird diese Aufgabe durch ein kleines Shellskript erledigt, welches per Cronjob zu den gewünschten Zeitpunkten aufgerufen wird.

    Alternativ (damit habe ich mich aber noch nicht beschäftigt) gibt es eben die Möglichkeit, durch die Ausgabe der Logfiles in eine Pipe dahinter ein entsprechend arbeitendes Programm zu stellen, welches die Aufgabe übernimmt. Das mag für Hochverfügbarkeitsserver oder hohe, durchgehende Last interessanter sein, weil der Apache-Neustart doch eine gewisse Unterbrechung des Betriebs bedeutet, und so außerdem eine noch schärfere Trennung der Zeitbereiche vorgenommen werden kann.

    - Sven Rautenberg

    1. Moin Sven (warum heißen eigentlich alle so wie ich? ;),

      Meine Frage also: Gibt es eine Möglichkeit, den Apachen _ohne Zusatzprogramme oder externe Programme_ dazu zu bewegen, monatlich einen neuen Log anzufangen?
      Nö, da ist nichts eingebaut, wenn ich richtig informiert bin.

      aja.

      Die übliche Vorgehensweise ist, einmal im Monat (oder wann auch immer man das wünscht) die existierenden Logfiledateien durch ein kleines Skript umzubenennen und dann den Apache neu zu starten. Dadurch legt er seine Logfiles neu an, und die sind dann leer.
      Die alten Logfiles kann man dann prima gzippen oder auswerten oder wegmailen - je nach Wunsch.
      Üblicherweise wird diese Aufgabe durch ein kleines Shellskript erledigt, welches per Cronjob zu den gewünschten Zeitpunkten aufgerufen wird.

      Hört sich nicht schlecht an - das könnte eigentlich ein kleines Perl-Scriptchen machen, was ich dann, wenn ich's bräuchte, einfach mal starte.

      Alternativ (damit habe ich mich aber noch nicht beschäftigt) gibt es eben die Möglichkeit, durch die Ausgabe der Logfiles in eine Pipe dahinter ein entsprechend arbeitendes Programm zu stellen, welches die Aufgabe übernimmt. Das mag für Hochverfügbarkeitsserver oder hohe, durchgehende Last interessanter sein, weil der Apache-Neustart doch eine gewisse Unterbrechung des Betriebs bedeutet, und so außerdem eine noch schärfere Trennung der Zeitbereiche vorgenommen werden kann.

      Genau diese möglichkeit habe ich ja angesprochen.

      Na dann,

      Gruß,

      Sven

      --
      !:        I'm back!
      Selfcode: ie:% fl:| br:^ va:{ ls:& fo:) rl:( n4:( ss:) de:> js:| ch:° mo:} zu:}
      Encode:   http://forum.de.selfhtml.org/cgi-bin/selfcode.pl
      Decode:   http://peter.in-berlin.de/projekte/selfcode/
      E-Mail:   coming soon
      me:       'd comed long ago
      1. Hallo,

        Die übliche Vorgehensweise ist, einmal im Monat (oder wann auch immer man das wünscht) die existierenden Logfiledateien durch ein kleines Skript umzubenennen und dann den Apache neu zu starten. Dadurch legt er seine Logfiles neu an, und die sind dann leer....

        Hört sich nicht schlecht an - das könnte eigentlich ein kleines Perl-Scriptchen machen, was ich dann, wenn ich's bräuchte, einfach mal starte.

        Ein (Unix)-Vorschlag findet sich unter [lin:http://httpd.apache.org/docs-2.0/logs.html#rotation].

        Grüße
          Klaus

        1. Hallo Klaus,

          Ein (Unix)-Vorschlag findet sich unter [lin:http://httpd.apache.org/docs-2.0/logs.html#rotation].

          Ja, diese Seite aus dem Manual habe ich mir bereits offline mal durchgelesen. Scheinbar startet Apache dabei bei jedem Neustart des servers einen neuen Log. Hört sich zwar gar nicht schlecht an, ist aber eigentlich nicht so gut, da ich z.B. bei irgendwelchen Fehlern den Apache in kurzer Zeit sehr oft neustarte.

          Interessant finde ich, dass der apache die Datei gleich selbst gzippen kann!? Die Direktive "gzip" verwundert mich jedoch sehr. Ich habe noch nie vorher was davon gehört und kann mir auch nicht vorstellen, dass ein "Gzip-Plugin" zum funktionsumfang von Apache gehört - wozu braucht ein webserver sowas? als modul wäre es zwar nicht schlecht, aber so!? *wunderwunder*

          Viele grüße,

          Sven

          --
          !:        I'm back!
          Selfcode: ie:% fl:| br:^ va:{ ls:& fo:) rl:( n4:( ss:) de:> js:| ch:° mo:} zu:}
          Encode:   http://forum.de.selfhtml.org/cgi-bin/selfcode.pl
          Decode:   http://peter.in-berlin.de/projekte/selfcode/
          E-Mail:   coming soon
          me:       'd comed long ago
          1. Moin!

            Ja, diese Seite aus dem Manual habe ich mir bereits offline mal durchgelesen. Scheinbar startet Apache dabei bei jedem Neustart des servers einen neuen Log. Hört sich zwar gar nicht schlecht an, ist aber eigentlich nicht so gut, da ich z.B. bei irgendwelchen Fehlern den Apache in kurzer Zeit sehr oft neustarte.

            Falsch verstanden. Das verlinkte Skript ist ein Shell-Skript, das hat mit dem Apache nur in sofern zu tun, als da "zufällig" Apache-Logfiles umbenannt/verschoben werden, der Apache neugestartet wird, und dann die Logfiles gzippt werden.

            Ein Shell-Skript ist eine Sammlung aufeinanderfolgender Befehle, die man manuell auch auf der Kommandozeile hätte eintippen können.

            Interessant finde ich, dass der apache die Datei gleich selbst gzippen kann!? Die Direktive "gzip" verwundert mich jedoch sehr. Ich habe noch nie vorher was davon gehört und kann mir auch nicht vorstellen, dass ein "Gzip-Plugin" zum funktionsumfang von Apache gehört - wozu braucht ein webserver sowas? als modul wäre es zwar nicht schlecht, aber so!? *wunderwunder*

            Der Apache tut mit dem Shellskript nichts. Das Skript wird nur dann ausgeführt, wenn die Logfiles rotiert werden sollen. Wird der Apache zwischendurch beendet und neugestartet, verwendet er seine existierenden Logfiles, ohne sie neu anzulegen oder zu leeren. Es ist daher absolut kein Problem, sowohl ständig Änderungen an der httpd.conf vorzunehmen und deswegen den Apache neuzustarten, als auch monatlich/wöchentlich/täglich/je-nach-Wunsch die Logfiles zu rotieren.

            - Sven Rautenberg

            1. Hola sven,

              Falsch verstanden. Das verlinkte Skript ist ein Shell-Skript, das hat mit dem Apache nur in sofern zu tun, als da "zufällig" Apache-Logfiles umbenannt/verschoben werden, der Apache neugestartet wird, und dann die Logfiles gzippt werden.

              ach so! Und ich wunderte mich schon wegen der vermeintlichen Direktive "gzip" ;)

              Ein Shell-Skript ist eine Sammlung aufeinanderfolgender Befehle, die man manuell auch auf der Kommandozeile hätte eintippen können.

              Auf Windowisch: .bat-File ;o)

              Übrigens: Ich dachte immer, Perl wäre die Shell-script-sprache von Linux!? Muss ich mich jetzt fertan haben ;)

              Der Apache tut mit dem Shellskript nichts. Das Skript wird nur dann ausgeführt, wenn die Logfiles rotiert werden sollen. Wird der Apache zwischendurch beendet und neugestartet, verwendet er seine existierenden Logfiles, ohne sie neu anzulegen oder zu leeren. Es ist daher absolut kein Problem, sowohl ständig Änderungen an der httpd.conf vorzunehmen und deswegen den Apache neuzustarten, als auch monatlich/wöchentlich/täglich/je-nach-Wunsch die Logfiles zu rotieren.

              heißt das jetzt definitiv, dass ich an der Logfile machen kann, was ich will, wenn der Apache läuft? Auch löschen und sowas? Während der Indianer läuft (eigentlich reiten sie ja)?

              Viele Grüße,

              Sven

              --
              !:        Evv. bald wieder weg
              Selfcode: ie:% fl:| br:^ va:{ ls:& fo:) rl:( n4:( ss:) de:> js:| ch:° mo:} zu:}
              Encode:   http://forum.de.selfhtml.org/cgi-bin/selfcode.pl
              Decode:   http://peter.in-berlin.de/projekte/selfcode/
              E-Mail:   coming soon
              me:       'd comed long ago
              1. Moin!

                heißt das jetzt definitiv, dass ich an der Logfile machen kann, was ich will, wenn der Apache läuft? Auch löschen und sowas? Während der Indianer läuft (eigentlich reiten sie ja)?

                Nein. Verschieben/Umbenennen ist eine Operation, die nur das Directory betrifft, aber nicht die Position des Files auf der Festplatte. Das bedeutet, dass der Apache weiterhin in die geöffnete Datei schreiben kann, auch wenn diese schon ganz anders heißt. Du kannst ja auch auf einen Briefumschlag eine neue Adresse schreiben, während jemand anderes da noch weitere Seiten hineintut.

                Mit dem Neustart des Apachen wird die alte Datei geschlossen und eine neue geöffnet - neu deswegen, weil der Apache unter dem konfigurierten Dateinamen keine existierende Datei vorfindet, denn die ist ja umbenannt worden.

                Der Dateiname ist tatsächlich wirklich nur beim Dateiöffnen interessant. Kannst du bei PHP z.B. doch gut nachvollziehen. Da brauchst du den Dateinamen nur für fopen(), danach hast du eine Variable mit einem Datei-Handle, um auf die Datei zuzugreifen. Und auch beim Schließen der Datei wird der Name nicht benötigt.

                - Sven Rautenberg

                1. Moin Sven,

                  heißt das jetzt definitiv, dass ich an der Logfile machen kann, was ich will, wenn der Apache läuft? Auch löschen und sowas? Während der Indianer läuft (eigentlich reiten sie ja)?
                  Nein. Verschieben/Umbenennen ist eine Operation, die nur das Directory betrifft, aber nicht die Position des Files auf der Festplatte. Das bedeutet, dass der Apache weiterhin in die geöffnete Datei schreiben kann, auch wenn diese schon ganz anders heißt. Du kannst ja auch auf einen Briefumschlag eine neue Adresse schreiben, während jemand anderes da noch weitere Seiten hineintut.

                  mhmh - aha :)

                  Mit dem Neustart des Apachen wird die alte Datei geschlossen und eine neue geöffnet - neu deswegen, weil der Apache unter dem konfigurierten Dateinamen keine existierende Datei vorfindet, denn die ist ja umbenannt worden.

                  D.h. dann also, dass ich mir ein Perl-Scriptchen schreiben kann, welches den aktuellen Log irgendeinem anderen Namen gibt und dann in irgendein Unterverzeichnis packt. Der Apache schreibt dann weiterhin in diesen Log, bis er dann (irgendwann) ausgeschaltet wird (was bei mir recht häufig passiert, da der PC nicht immer an ist ;). Wird der PC dann irgendwann wieder angeschaltet und der Apache startet neu, legt er gerade einen neuen (nud damit leeren) Log an.
                  Oder?

                  Das ist ja super - denn dann scripte ich mir gerade mal sowas zusammen und dann habe ich ein voll-manuelles kleines Programmmchen, mit dem ich - wenn es mir nötig erscheint, einfach mal meinen Log archiviere. :)

                  Der Dateiname ist tatsächlich wirklich nur beim Dateiöffnen interessant. Kannst du bei PHP z.B. doch gut nachvollziehen. Da brauchst du den Dateinamen nur für fopen(), danach hast du eine Variable mit einem Datei-Handle, um auf die Datei zuzugreifen. Und auch beim Schließen der Datei wird der Name nicht benötigt.

                  na gut, klar - aber wenn ich jetzt z.B. während PHP mit der datei sonstwas macht diese öffne und dran rumbastel und dann speichern will, während PHP auch damit rumbastelt -- wie sieht's dann aus? Afaik kann ich dann nicht speichern, da PHP die Datei als erster geöffnet hat und somit "Exklusivrecht" besitzt ;) . oder?

                  Gruß,

                  Sven

                  --
                  !:        Evv. bald wieder weg
                  Selfcode: ie:% fl:| br:^ va:{ ls:& fo:) rl:( n4:( ss:) de:> js:| ch:° mo:} zu:}
                  Encode:   http://forum.de.selfhtml.org/cgi-bin/selfcode.pl
                  Decode:   http://peter.in-berlin.de/projekte/selfcode/
                  E-Mail:   coming soon
                  me:       'd comed long ago
          2. Hi,

            Interessant finde ich, dass der apache die Datei gleich selbst gzippen kann!? Die Direktive "gzip" verwundert mich jedoch sehr. Ich habe noch nie vorher was davon gehört und kann mir auch nicht vorstellen, dass ein "Gzip-Plugin" zum funktionsumfang von Apache gehört

            mod_gzip existiert - ob es im Standard-Lieferumfang drin ist, weiß ich nicht.

            • wozu braucht ein webserver sowas?

            Um Webseiten komprimiert auszuliefern (falls der Client das kann) und damit Traffic zu sparen.

            cu,
            Andreas

            --
            MudGuard? Siehe http://www.Mud-Guard.de/
            Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
            1. Hi MudGuard,

              Interessant finde ich, dass der apache die Datei gleich selbst gzippen kann!? Die Direktive "gzip" verwundert mich jedoch sehr. Ich habe noch nie vorher was davon gehört und kann mir auch nicht vorstellen, dass ein "Gzip-Plugin" zum funktionsumfang von Apache gehört
              mod_gzip existiert - ob es im Standard-Lieferumfang drin ist, weiß ich nicht.

              afaik nicht. Aber höchstwahrscheinlich ist dieses modul zur komprimierten Übertragung der Daten zwischen Client und Server, und nicht, damit der Server seine Logs gleich gzippen kann ;)

              • wozu braucht ein webserver sowas?
                Um Webseiten komprimiert auszuliefern (falls der Client das kann) und damit Traffic zu sparen.

              gnau :)

              Gruß,

              Sven

              --
              !:        Evv. bald wieder weg
              Selfcode: ie:% fl:| br:^ va:{ ls:& fo:) rl:( n4:( ss:) de:> js:| ch:° mo:} zu:}
              Encode:   http://forum.de.selfhtml.org/cgi-bin/selfcode.pl
              Decode:   http://peter.in-berlin.de/projekte/selfcode/
              E-Mail:   coming soon
              me:       'd comed long ago
  2. Also ich mache es so, dass ein PHP Skript das Logfile ausliest in eine neue Datei schreibt und daraufhin die Datensätze aus dem Originallogfile rauslöscht.

    1. Also ich mache es so, dass ein PHP Skript das Logfile ausliest in eine neue Datei schreibt und daraufhin die Datensätze aus dem Originallogfile rauslöscht.

      Wie soll das gehen??
      Auf meinem Test-Server (der auf meinem Schreibtisch steht) hält der Indianer die Logdatei geöffnet, solange er läuft - sie ist damit durch das Betriebssystem (Win2k) automatisch schreibgeschützt. Deswegen muss ich meinen Apachen auch immer stoppen und neu starten, wenn ich die vorhandenen Logfiles leeren will.

      *kopfschüttel*

      Martin