
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 -c
und ü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
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 watch
und 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 test
in 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.