Wie kann ich viele Protokolldateien pro Umdrehung in ein anderes Unterverzeichnis drehen?

11

Ich habe ein Verzeichnis mit vielen Protokolldateien, die ich täglich wechseln möchte. Aus organisatorischen Gründen möchte ich in der Lage sein, die gedrehten Protokolle in ein anderes Verzeichnis (oder Unterverzeichnis) zu verschieben, das nach Datum benannt ist, wobei die letzte Protokollwoche beibehalten wird.

Ich kann logrotate verwenden, um das meiste davon zu erreichen, indem ich die Dateien an Ort und Stelle rotiere oder sie mithilfe der olddirDirektive sogar in ein anderes Verzeichnis verschiebe, aber ich habe Probleme, eine Lösung zu finden, um einzelne Unterverzeichnisse pro Umdrehung zu erstellen. Wie kann ich das erreichen?:

Logs to rotate: /var/log/example/*

Desired target directories (keeping a week):
    /var/log/example/20121006/*
    [ ... ]
    /var/log/example/20121012/*
Dave Forgac
quelle

Antworten:

8

Sie sollten in der Lage sein, ein externes Skript in der postrotateDirektive aufzurufen :

postrotate
  /path/to/your.sh
endscript

und lassen Sie dieses Skript die Bewegung ausführen, z.

#!/bin/bash

newdir=/var/log/example/`date +%Y%m%d`

mkdir $newdir
mv /var/log/example.1.gz $newdir

find /var/log/example -mindepth 1 -maxdepth 1 -mtime +7 \
  -type d -print0 | xargs -0 rm -rf

Es könnte jedoch einfacher sein, nur die dateextRichtlinie zu verwenden. Damit werden die gedrehten Dateien mit einem Zeitstempel versehen (obwohl nicht in ein anderes Verzeichnis verschoben).

Siehe logrotate(8)Einzelheiten zu beiden Richtlinien.

Ansgar Wiechers
quelle
Es scheint, dass postrotatedies den Trick tun wird. Das einzige, was ich hinzufügen muss, ist das Löschen der alten Verzeichnisse, die über einer bestimmten Anzahl oder älter als ein bestimmtes Datum liegen.
Dave Forgac
1
Siehe aktualisierte Antwort. Der find | xargsBefehl sollte alle unmittelbaren Unterverzeichnisse löschen, /var/log/examplewenn sie zuletzt vor mehr als 7 Tagen geändert wurden.
Ansgar Wiechers
1

Sie haben eine olddirDirektive, die Sie in der Konfigurationsdatei verwenden können.

Aus der Dokumentation:

olddir
Protokolle werden zur Rotation in ein Verzeichnis verschoben. Das Verzeichnis muss sich auf demselben physischen Gerät befinden wie die zu drehende Protokolldatei und wird als relativ zu dem Verzeichnis angesehen, in dem sich die Protokolldatei befindet, sofern kein absoluter Pfadname angegeben ist. Wenn diese Option verwendet wird, landen alle alten Versionen des Protokolls im Verzeichnis. Diese Option kann durch die noolddirOption überschrieben werden .

Referenz : https://manpages.debian.org/jessie/logrotate/logrotate.8.en.html

Eugen Bogdanovich
quelle