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.
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.
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 .
nodateext
,olddir
,compress
, unddaily
Optionen.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.
Kopiert und gzips /logs/sys.log nach /logs/logarchive/sys.20120101.log.gz, speichert Protokolle im Wert von einer Woche.
quelle
logrotate
selbst macht das nicht. Ich würde empfehlen, ein zusätzliches Skript zu schreiben und eslogrotate
über diepostrotate
Option in der Konfiguration aufzurufen .quelle