Hallo,
villamarinella: dein Ansatz hat IMHO mehrere Fehler.
1. willst du das Skript eigentlich gar nicht in einer Endlosschleife laufen lassen - dann ist es nämlich 99,9% der Zeit mit nichts tun beschäftigt. Wenn du es periodisch brauchst, dann rufe es periodisch auf, z.B. über eine systemd Timer Unit.
2. besteht für die absolut keine Notwendigkeit, den gesamten Inhalt der Datei im Speicher zu halten - weil dich ja nur eine (kleiner) Teil der Daten interessiert.
Hier mal ein schnell zusammengehaktes Python 3 Skript (läuft unter Python 3.4), was eine Datei liest und sich die letzte Zeilenanzahl merkt. Wird es nochmal aufgerufen, werden nur Zeilen ausgegeben, die dazu gekommen sind:
[code=php]import dbm
from itertools import islice
from sys import maxsize
with dbm.open('linecount.dbm', 'c') as db:
try:
linecount = int(db['linecount'])
except KeyError:
linecount = 0
db['linecount'] = str(linecount)
with open('dokument.txt', 'r') as f:
counter = ''
for counter, line in enumerate(islice(f, linecount, maxsize, 1)):
print(line)
if counter != '':
linecount = linecount+counter+1
db['linecount'] = str(linecount)[/php]
Im Prinzip selbsterklärend - spätestens dann, wenn man die Doku zu dbm und islice gelesen hat.
3. wird auch dieses Skript irgendwann versagen, weil die Apache Logdateien dem logrotate unterliegen, d.h. irgendwann wird die aktuelle Logdatei archiviert und eine neue angelegt. Dann funktioniert die Zeilenzählung nicht mehr.
Gruß, noisefloor