Komprimieren Sie die alte Protokolldatei in ein einziges Zip-Linux


7

Ich habe einen Ordner, /home/testuser/logder Protokolldateien von einem Tag alt enthält *.log. Ich möchte alle Protokolldateien, die älter als ein Tag sind, auf eine einzige Zip-Datei (gzip oder tar.gz) komprimieren und die älteren Dateien löschen.

Ich habe versucht, Find- und Tar-Befehle per Pipeline zu übertragen, aber es hat nicht funktioniert


4
Wenn Sie dies mehr als einmal tun müssen, logrotateist Ihr Freund
sr_

@sr_ Vielleicht kannst du es in einer Antwort erweitern?
Bernhard

Ich plane, einen Job in Cron Tab zu setzen, um dies zu tun. Ich komprimiere -> Verschiebe an einen anderen Ort. Dies ist, was ich vorhabe zu tun .. aber nicht in der Lage, alle Dateien in einem zip / gz zu komprimieren
Ajo Mathew

Was meinst du mit "ältere Dateien löschen"? Möchten Sie komprimieren und dann dieselben Dateien löschen, die komprimiert sind?
Rahul Patil

Entschuldigung für die Verwirrung mit einem Beispielbeispiel: log1 erstellt heute log2 log3 sind alt. Komprimiere log2 log3 -> output.gz und lösche dann log2 und log3
Ajo Mathew

Antworten:


10

Erstellen Sie tar.gz-Dateien, die älter als ein Tag sind

find /home/testuser/log/ -mtime +1 | xargs  tar -czvPf  /opt/older_log_$(date +%F).tar.gz

Ältere Dateien löschen [Hinweis: - Wenn die unten stehende Suchausgabe korrekt ist, entfernen Sie das Echo. Danach werden diese Dateien gelöscht.]

find /home/testuser/ -mtime +1 | xargs  -n1 echo rm

3
Für den zweiten Teil können Sie einfach eingeben
Paul Calabro

1

Ich erweitere den Kommentar von sr_ und verwende logrotate, um einen nächtlichen SQL-Dump zu verwalten. Ich habe diese Konfiguration in /etc/logrotate.d/mydbdump:

/var/backups/dump.sql {
        daily
        rotate 7
        missingok
        create 640 root root
        compress
}

Grundsätzlich wird die /var/backups/dump.sqlDatei (Sie würden stattdessen den Namen Ihrer Protokolldatei angeben) komprimiert und in umbenannt dump.sql.1.gz. Davor dreht es das alte dump.sql.1.gzauf dump.sql.2.gzund so weiter und löscht das älteste.

logrotateselbst wird normalerweise von aufgerufen. cronSehen Sie sich also Ihre /etc/cron*Verzeichnisse an, um zu steuern, wann es ausgeführt wird.


1
Toller Vorschlag, aber er erfüllt noch nicht die Anforderungen des OP "an einen einzigen Reißverschluss".
Gertvdijk

Ich habe nur wenige Protokolldateien log1.log log2.log Meine Idee war, das Erstellungsdatum der Dateien zu übernehmen if(created date=current date-1) compress all, move to new location, Delete older files
Ajo Mathew

@ b00tbu9 logrotateerledigt das für Sie. Wenn Sie sich Ihr /var/logVerzeichnis ansehen und die *.#.gzDateien bemerken , sehen Sie die Ergebnisse.
Domsom

@gertvdijk Wenn die einzelne Zip-Datei erforderlich ist, würde ich vorschlagen, die Optionen prerotate/ postrotatezu verwenden, um die Eingabe- / Ausgabedateien manuell zusammenzuführen.
Domsom
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.