Behalten Sie die Größe der Protokolldatei bei, ohne logrotate zu verwenden.

Behalten Sie die Größe der Protokolldatei bei, ohne logrotate zu verwenden.

Gibt es eine Möglichkeit, die Dateigröße der Protokolldatei konstant zu halten, ohne sie durch eine neue leere Datei zu ersetzen und die alte Datei zu löschen (oder zu archivieren). Wenn ich beispielsweise die maximale Größe der Protokolldatei auf 1 MB einstelle, wird die Dateigröße, wenn sie über diese Grenze hinausgeht, automatisch begrenzt, der Text wird am „Ende“ hinzugefügt und der älteste Textteil wird herausgezogen, um die Dateigröße auf 1 MB zu beschränken.

Antwort1

Sie könnten hierfür ein kleines Bash-Skript schreiben. Verkürzen Sie die Datei einfach mit einer bestimmten Byteanzahl tail -cund überschreiben Sie die Datei.

aus man tail:

-c, --bytes=N
              output the last N bytes; alternatively, use +N to  output  bytes
              starting with the Nth of each file

   If  the  first  character of N (the number of bytes or lines) is a `+',
   print beginning with the Nth item from the start of each  file,  other‐
   wise, print the last N items in the file.  N may have a multiplier suf‐
   fix:  b  512,  kB  1000,  K  1024,  MB  1000*1000,  M   1024*1024,   GB
   1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y.

Antwort2

Ich bin sicher, dass der ursprüngliche Verfasser nach 8 Jahren eine Lösung gefunden hat. Hier ist noch eine für andere, die diesen Thread vielleicht lesen …

curtail begrenzt die Größe der Programmausgabe und bewahrt die letzten 200 MB der Ausgabe mit dem folgenden Befehl auf:

run_program | curtail -s 200M myprogram.log

https://github.com/Comcast/Infinite-File-Curtailer

Antwort3

Ihre einzige Lösung könnte sein, Ihr eigenes Userspace-Dateisystem zu schreiben oder zu einem bestehenden beizutragen. Sehen Sie sich die unvollständige Liste unterDateisystem im Userspace

Wenn Sie nicht über die erforderlichen Fähigkeiten verfügen, um einen Beitrag zu leisten, bieten Sie Werbung für das Projekt oder Geld oder beides an, damit es für Sie hinzugefügt wird.

Ich wünschte, ich hätte die Zeit dazu, ich wollte schon immer genau so etwas.

Antwort4

Hier ist meine zweite Antwort. Das ist ziemlich schlampig.

Verwenden Sie watch(1) zur wiederholten Ausführung tail --bytes=1024(der letzten 1024 Bytes der Protokolldatei, Danke an @jjclarkson für die Antwort).

watch --no-title tail --bytes=1024 /var/log/messages >/tmp/messages.watch

Und dann zeigen Sie die Datei an mit:

less --raw-control-chars /tmp/messages.watch

Der Unterschied zwischen watchund einer While-Schleife besteht darin, dass watch/tmp/messages.watch nur aktualisiert wird, wenn es Änderungen an /var/log/messages gab.

while true; do
    tail --bytes=1024 /var/log/messages > /tmp/messages.watch
    sleep 1
done

Und ich schätze, Sie könnten eins testin die While-Schleife einfügen, sodass das Tail nur ausgeführt wird, wenn /var/log/messages aktualisiert wurde, aber das werde ich jetzt nicht herausfinden.

verwandte Informationen