Mein Ziel ist es, die Protokolldateien von 4 Tagen aufzubewahren, sodass am fünften Tag eine ZIP-Datei mit allen vier Protokolldateien erstellt wird. Die vier bisher erstellten Protokolldateien werden gelöscht.
Das ist mein logrotate.conf
:
/home/ubuntu/logs/server.log {
daily
missingok
rotate 5
compress
create
dateext
dateyesterday
dateformat .%Y-%m-%d
extension .gz
}
Ich habe einen crontab
Eintrag als:
2 0 * * * /usr/sbin/logrotate /home/ubuntu/logrotate.conf --state /home/ubuntu/logrotate.state
Ich sehe eine ZIP-Datei für den fünften Tag zusammen mit leeren Dateien der vorherigen vier Tage und vier weitere ZIP-Dateien mit den leeren Dateien.
rotate 5
Bedeutet „ und soll nicht compress
bedeuten, dass die vorherigen 4 Dateien entfernt werden, nachdem sie in ein Archiv komprimiert und gezippt wurden?
Antwort1
rotate
und compress
sind unabhängig. compress
komprimiert jede rotierte Protokolldatei und rotate
legt fest, wie viele rotierte Protokolldateien aufbewahrt werden sollen. Die gemeinsame Verwendung bedeutet nicht, dass rotierte Protokolldateien kombiniert und komprimiert werden.
post-rotate
Sie können beispielsweise ein Skript wie das folgende verwenden :
zcat /home/ubuntu/logs/server.log.*.gz |
gzip | sponge /home/ubuntu/logs/server.log.$(date -d "now - 5 days" +%Y-%m-%d).gz
(Verwenden Sie sponge
„from“ moreutils
, um die letzte Protokolldatei zu überschreiben.)
Das heißt, extension .gz
es ist nutzlos, wenn Ihre Protokolldateien nicht tatsächlich eine .gz
Erweiterung haben.