PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : perl Script um dateien in der Größe zu begrenzen



funnybox2006
24-09-2010, 11:36
Hallo,

ich habe mal eine Frage. Ich betreibe einen Linux Server auf dem ein (proprietärer) Dämon läuft der Logmeldungen einer Heizunssteuerung im Terminal ausgibt. Diese Meldungen hänge ich fortlaufend an eine Logdatei an. Diese Datei wird mit der Zeit sehr groß. Da ich den Server nur mit einem DOM betreibe ist Speicherplatz knapp bemessen. Eine maximale Dateigröße von 20MB würde mir völlig ausreichen. Nun habe ich mir überlegt ein perl Script zu schreiben das einmal Pro Tag überprüft ob die Logdatei über 20MB angewachsen ist. In dem fall soll das script die Datei am Anfang beschneiden so dass nur noch 10MB übrig bleiben. Dann wieder warten bis 20MB erreicht sind usw.

Ist sowas relativ einfach machbar? Wie kann man den Zugriff auf die Logdatei synchronisieren? In dem Moment wo das perl-Script auf der Datei arbeitet dürft ja nix angehangen werden korrekt?

Viele Grüße

Molaf
24-09-2010, 12:40
Reagiert denn der Daemon auf flock? Wenn ja, dann kann man ihn solange blockieren, bis das perl-programm fertig ist.

funnybox2006
24-09-2010, 12:48
ich leite die Konsolenausgabe des Dämons mit dem >> Operator an die Logdatei weiter. Eventuell könnte man ja den ganzen Informationsstrom an perl übergeben anstatt direkt in die Logdatei zu schreiben. Dann könnte das Perl Script sich fortlaufend darum kümmern und dirket noch uninteressante Informationen rausfiltern. Müsste gehen oder!?

Molaf
27-09-2010, 05:24
Ja, das müßte gehen.

Das Perl-Skript sollte die Eingabe vorhalten, ein flock auf die Ausgabedatei setzen und erst dann Daten schreiben (mit rw-Modus).
Ist die Dateigröße dann zu groß geworden das Dateihandle auf den Dateianfang setzen, alles einlesen, im Speicher einen Teil wegwerfen.
Dann wieder den Handle auf den Dateianfang setzen und alles wieder schreiben, erst dann die Datei schliessen (flock geht dann verloren, ein eventuell schon wartendes Dublikat des Skripts mit neuen Daten kommt dann zum Zug).

Die File-Handle Operation gibs in Modulen, ich hab sie aber grad nicht parat, irgendwas mit file::.*