Als Alternative könnten Sie die Ausgabe durch Tools leiten, die mit dem primären Zweck entwickelt wurden, größenbegrenzte, automatisch rotierte Protokolldateisätze zu verwalten, wie zum Beispiel:
- Dan Bernsteins
multilogvon Daemontools - Bruce Guenters
multilogvon daemontools-encore - Laurent Bercots
s6-logab s6 - Gerrit Papes
svlogdvon runit - Wayne Marshalls
tinylogvon Täter - Mein
cyclogvon nosh
Tools, um dann multilog zu verarbeiten -Format-Protokolldateisätze umfassen unter anderem:
- Russ Allberys
multilog-watch logrange- Paul Kremers
multilog-stamptail - Mein
follow-log-directoriesvon nosh - Mein
export-to-rsyslogvon nosh
Weiterführende Literatur
- Jonathan de Boyne Pollard (2015). "Protokollierung". Die Daemontools-Familie . Häufig gegebene Antworten.
- Jonathan de Boyne Pollard (2016). Verwenden Sie nicht
logrotateodernewsyslogin diesem Jahrhundert. . Häufig gegebene Antworten. - https://unix.stackexchange.com/a/326166/5132
die rotatelogs Werkzeug, das mit Apache geliefert wird (in der Datei bin dir) (siehe Dokumentation) nimmt Eingaben von stdin entgegen und rotiert das Protokoll nach einer bestimmten Zeit
Ich hatte ein ähnliches Problem und musste logrotate zunächst verwerfen, aber es stellte sich heraus, dass logrotate dies tatsächlich gut kann, die Schlüsseldirektive ist "copytruncate ". Aus irgendeinem Grund tauchte dieser Begriff beim Googeln nicht auf, also füge ich diese Antwort hinzu, um genau zu verdeutlichen, wie man ihn in diesem Fall verwendet.
Der Trick ist, dass dies nur funktioniert wenn die Weiterleitung mit ">> erfolgt " (anhängen) statt "> " (erstellen).
Konfigurationsdatei (truncate.cfg):
/tmp/temp.log {
size 10M
copytruncate
rotate 4
maxage 100
}
Testprogramm (gibt niemals Datei auf). Sie können beobachten, wie es die Festplatte füllt, und obwohl das Löschen der Protokolldatei zu funktionieren scheint, wird es nicht wirklich Speicherplatz auf der Festplatte freigeben:
cat /dev/urandom >> /tmp/temp.log
Laufende Protokollrotation:
logrotate truncate.cfg