Gibt es eine Möglichkeit, die Dateigröße der Protokolldatei festzuhalten, ohne sie durch eine neue leere Datei zu drehen und die alte Datei zu löschen (oder zu archivieren)? Wenn ich zum Beispiel die maximale Größe der Protokolldatei auf 1 MB festlege, wird der Text nach dem Überschreiten dieser Grenze automatisch geklemmt, und der älteste Teil des Texts wird ausgegeben, um die Dateigröße von 1 MB beizubehalten .
13
rm -f *.tar.gz.*
Antworten:
Sie könnten ein kleines Bash-Skript schreiben, um dies zu tun. Stellen Sie die Datei einfach auf eine bestimmte Anzahl von Bytes ein
tail -c
und überschreiben Sie die Datei.von
man tail
:quelle
Möglicherweise besteht Ihre einzige Lösung darin, Ihr eigenes Userspace-Dateisystem zu schreiben oder zu einem vorhandenen beizutragen. Schauen Sie sich die Teilliste unter Dateisystem im Userspace an
Wenn Sie nicht die Fähigkeiten haben, einen Beitrag zu leisten, bieten Sie eine Projektwerbung oder $$$ oder beides an, um sie für Sie hinzuzufügen.
Ich wünschte, ich hätte die Zeit dazu, ich wollte immer genau so etwas.
quelle
Ähnliches können Sie mit einem FIFO tun, das einer Datei mit einer Größe von null Byte ähnelt.
Beachten Sie jedoch, dass der Syslog-Prozess möglicherweise blockiert wird und nicht mehr in ALLE Ihre Protokolldateien geschrieben wird, wenn diese Datei leer ist. Ich bin nicht sicher, ob dieses Verhalten mit neueren Versionen von Ubuntu / CentOS geändert wurde.
Ein Beispiel hier
Versuchen Sie es mit einem anderen Beispiel.
Machen Sie Ihren FIFO:
Und füge dies zu (r) syslog.conf hinzu und starte dann syslog neu:
Dann schauen Sie sich das FIFO in einem Fenster an:
Und in einem anderen Fenster schicke ein paar Sachen an syslog:
Sie sollten die Zeilen "Test *" in der Ausgabe von
cat
oben sehen.Diese Funktion eignet sich hervorragend zum Debuggen, insbesondere wenn Sie die Daten nicht länger aufbewahren möchten. Wenn Sie beispielsweise nur alles außer Firewall-Spam anzeigen möchten, können Sie Folgendes tun:
quelle
Hier ist meine zweite Antwort. Das ist ziemlich hackisch.
Verwenden Sie watch (1), um wiederholt auszuführen
tail --bytes=1024
(die letzten 1024 Bytes der Protokolldatei, danke an @jjclarkson für diese Antwort).Und dann sehen Sie die Datei mit:
Der Unterschied zwischen
watch
und einer while-Schleife besteht darin, dasswatch
/tmp/messages.watch nur aktualisiert wird, wenn Änderungen an / var / log / messages vorgenommen wurden.Und nun, ich denke, Sie könnten eine
test
while-Schleife einfügen, damit tail nur ausgeführt wird, wenn / var / log / messages aktualisiert wurde, aber ich werde das jetzt nicht herausfinden.quelle
https://groups.google.com/group/mod.sources/browse_thread/thread/b2136b3ab7e924e/f785b37c218bb576?hl=de&ie=UTF-8&q=prune+log+file&pli=1
Viele (die meisten? Alle?) Daemons öffnen ihre Protokolldateien erneut, wenn ein HUP-Signal gesendet wird (z. B. von demselben Cron-Job, der prune ausführt).
quelle
Ich bin mir sicher, dass das Originalplakat nach 8 Jahren eine Lösung gefunden hat. Hier ist noch eine für andere, die diesen Thread lesen können ...
curtail begrenzt die Größe der Programmausgabe und behält die letzten 200 MB der Ausgabe mit dem folgenden Befehl bei:
run_program | verkürzen -s 200M myprogram.log
https://github.com/Comcast/Infinite-File-Curtailer
quelle