Jak mogę obrócić wiele plików dziennika do innego podkatalogu na obrót?

12

Mam katalog z wieloma plikami dziennika, z których wszystkie chciałbym codziennie zmieniać. W celach organizacyjnych chciałbym móc przenieść obrócone dzienniki do innego katalogu (lub podkatalogu) o nazwie według daty, z zachowaniem ostatniego tygodnia dzienników.

Mogę użyć programu logrotate, aby osiągnąć większość tego, przemieszczając pliki w miejscu lub nawet przenieść je do jednego innego katalogu za pomocą olddirdyrektywy, ale mam problem ze znalezieniem rozwiązania dla tworzenia poszczególnych podkatalogów na obrót. Jak mogę to osiągnąć ?:

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

Desired target directories (keeping a week):
    /var/log/example/20121006/*
    [ ... ]
    /var/log/example/20121012/*
Dave Forgac
źródło

Odpowiedzi:

9

Powinieneś być w stanie wywołać zewnętrzny skrypt w postrotatedyrektywie:

postrotate
  /path/to/your.sh
endscript

i niech ten skrypt wykona ruch, np .:

#!/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

Jednak łatwiej jest po prostu skorzystać z dateextdyrektywy. Dzięki temu obrócone pliki zostaną dołączone ze znacznikiem czasu (chociaż nie zostaną przeniesione do innego katalogu).

Zobacz logrotate(8)szczegóły na temat obu dyrektyw.

Ansgar Wiechers
źródło
Wygląda na to, że to postrotatewystarczy. Jedyne, co muszę dodać, to wyczyszczenie starych katalogów, które są ponad określoną liczbę lub starsze niż określona data.
Dave Forgac
1
Zobacz zaktualizowaną odpowiedź. find | xargsPolecenie powinno usunąć wszystkie podkatalogi natychmiastowe /var/log/examplegdyby były ostatnio zmodyfikowano więcej niż 7 dni temu.
Ansgar Wiechers
1

Masz olddirdyrektywę, której możesz użyć w pliku konfiguracyjnym.

Z dokumentacji:

olddir
Dzienniki są przenoszone do katalogu w celu rotacji. Katalog musi znajdować się na tym samym urządzeniu fizycznym, co obracany plik dziennika, i zakłada się, że jest względny w stosunku do katalogu zawierającego plik dziennika, chyba że określono bezwzględną nazwę ścieżki. Gdy ta opcja jest używana, wszystkie starsze wersje dziennika kończą się w katalogu. Ta opcja może zostać zastąpiona przez tę noolddiropcję.

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

Eugen Bogdanovich
źródło