Kann ich logrotate verwenden, um tägliche Protokolle (Datum mit Namen) zu komprimieren?

8

Ich habe Protokolle im folgenden Format: JJJJMMTT

Ich möchte alte Protokolle (älter als der aktuelle Tag) komprimieren und sie anschließend möglicherweise in ein anderes Verzeichnis verschieben.

Kann ich dies in logrotate tun oder muss ich ein benutzerdefiniertes Skript in cron verwenden?

Šimon Tóth
quelle

Antworten:

4

Hier ist ein Quickie-Skript, das genau das tut, was Sie brauchen:

#!/bin/bash
LOGDIR=/var/log/somedir
OLDLOGS=/var/log/keep-old-logs-here
PATH=/bin:$PATH
TODAY=$(date +'%Y%m%d')

[ -d $OLDLOGS ] || mkdir -p $OLDLOGS

cd $LOGDIR

for LOG in $(ls | egrep '^[[:digit:]]{8}$'); do
    [ $LOG -lt $TODAY ] && gzip $LOG && mv $LOG.gz 
done

Machen Sie das Skript ausführbar:

$ chmod +x /where/you/put/this/script

Der Crontab-Eintrag sieht folgendermaßen aus:

30 0 * * * /where/you/put/this/script

Einfach einstellen LOGDIRund OLDLOGDIR. Um 12:30 Uhr werden alle Protokolle im Format JJJJMMTT für die vorherigen (und gegebenenfalls früheren) Tage verschoben.

unpythonisch
quelle
4
Ja, aber es beantwortet meine Frage nicht wirklich. Meine Frage war, ob ich dafür logrotate verwenden kann.
Šimon Tóth
@Let_Me_Be - Ich dachte, dass dies in meiner Antwort impliziert ist. Nein, logrotate macht nicht genau das, was Sie wollen. Das heißt, Sie können nicht nur JJJJMMTT-Dateien abgleichen. Ansonsten können Sie nahe kommen , indem Sie nodateext, olddir, compress, und dailyOptionen.
unpythonic
3

logrotate kann dies mit olddir tun, wenn der Name Ihrer Protokolldatei bei jeder Ausführung gleich ist und Sie Datumsangaben hinzufügen können. Wenn sich der Name Ihrer Protokolldatei ändert, z. B. JJJJMMTT, übernimmt logrotate dies nicht für Sie.

# sample logrotate conf file
copytruncate
compress
dateformat %Y%m%d.
dateext
extension log
olddir ./logarchive

/logs/sys.log {
    rotate 7
    daily
}

Kopiert und gzips /logs/sys.log nach /logs/logarchive/sys.20120101.log.gz, speichert Protokolle im Wert von einer Woche.

Jason
quelle
1
Dies ist nicht die Antwort. Die Protokolle haben bereits Datenstempel und werden effektiv gedreht. Let_Me_Be möchte sie nur komprimieren. Ich glaube @jmtd ist richtig.
Andrew Lorien
2

logrotateselbst macht das nicht. Ich würde empfehlen, ein zusätzliches Skript zu schreiben und es logrotateüber die postrotateOption in der Konfiguration aufzurufen .

jmtd
quelle