Logrotate wöchentliche Archivierung leert täglich Dateien

Logrotate wöchentliche Archivierung leert täglich Dateien

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 crontabEintrag 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 5Bedeutet „ und soll nicht compressbedeuten, dass die vorherigen 4 Dateien entfernt werden, nachdem sie in ein Archiv komprimiert und gezippt wurden?

Antwort1

rotateund compresssind unabhängig. compresskomprimiert jede rotierte Protokolldatei und rotatelegt fest, wie viele rotierte Protokolldateien aufbewahrt werden sollen. Die gemeinsame Verwendung bedeutet nicht, dass rotierte Protokolldateien kombiniert und komprimiert werden.

post-rotateSie 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 .gzes ist nutzlos, wenn Ihre Protokolldateien nicht tatsächlich eine .gzErweiterung haben.

verwandte Informationen