Tom: access_log

Beitrag lesen

Hello,

  1. $file = file("access_log");
  2. access_log leeren! (nicht löschen sondern leeren)
  3. foreach($file as $line) -> exploden und in db speichern

Da läuft über einen CronJob das Programm LogRotate. Musste mal nach suchen, wie sich das bezüglich der Groß-/Kleinschreibung wirklich schreibt.

Das ist aus dem von Dir genannten Grund auch gar nicht so unkritisch.
Der Apache hält nämlich ein Handle auf die Log-Datei.
Das darf man ihm auch nicht wegnehmen, oder kaputtmachen, sonst logged er nicht mehr weiter.
Es gibt aber auch keinen Fehler, wenn man ihm die Datei wegnimmt. Die weiteren Logbucheinträge landen dann einach im dev NUL

Wie logrotate das nun so genau macht, habe ich leider auch noch nicht rausgefunden, bzw. war zu faul dazu, habe es damals einfach aus dem Cron-Job rausgenommen...

Ich nehme an, dass Logrotate die Datei im Append-Modus hält.
Dann kann man sie gleichzeitig auslesen.
Zu untersichenm, wie aber genau der Sperrmechanismus funktioniert, habe ich noch auf dem Zettel.
Ich stelle mir das so vor:

zweiter Prozess setzt sich auf die Datei
  Sperrt die Datei mit soft-read-lock
  liest sie aus
  kürzt sie auf 0
  gibt sie wieder frei

dann müsste logrotate auch mit soft-lock (advisory lock) arbeiten
  die Datei exclusiv sperren
  append ausführen
  die Datei wieder freigeben

Und  der Append-Mechanismus müsste Rücksicht auf die aktuelle Länge der Datei nehmen.

Wenn da man nicht noch was anderes dahintersteckt?
Z.B. dass Appends aus verschiedenen Prozessen automatisch serialisiert werden?
Wäre zumindest denkbar. Das hat ja schließlich schon funktioniert, als man sich über Locking noch keine weiteren Gedanken gemacht hat.

Harzliche Grüße vom Berg
http://www.annerschbarrich.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau