Bagaimana saya bisa memutar banyak file log ke subdirektori yang berbeda per rotasi?

12

Saya memiliki direktori dengan banyak file log, yang semuanya ingin saya putar setiap hari. Untuk tujuan organisasi saya ingin dapat memindahkan log yang diputar ke direktori yang berbeda (atau subdirektori) dengan nama tanggal, menyimpan minggu terakhir dari log.

Saya dapat menggunakan logrotate untuk mencapai sebagian besar hal ini dengan mem-roat file-file di tempat atau bahkan memindahkannya ke direktori tunggal yang berbeda menggunakan olddirdirektif tetapi saya mengalami kesulitan menemukan solusi untuk membuat sub-direktori individu per rotasi. Bagaimana saya bisa mencapai ini ?:

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

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

Jawaban:

9

Anda harus dapat memanggil skrip eksternal dalam postrotatearahan:

postrotate
  /path/to/your.sh
endscript

dan minta skrip itu untuk bergerak, misalnya:

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

Namun, mungkin lebih mudah menggunakan dateextarahan saja. Dengan itu file yang diputar akan ditambahkan dengan stempel waktu (meskipun tidak dipindahkan ke direktori lain).

Lihat logrotate(8)detail tentang kedua arahan.

Ansgar Wiechers
sumber
Tampaknya postrotateakan melakukan trik. Satu-satunya hal yang perlu saya tambahkan adalah membersihkan direktori lama yang melebihi hitungan tertentu atau lebih tua dari tanggal tertentu.
Dave Forgac
1
Lihat jawaban yang diperbarui. The find | xargsperintah harus menghapus semua subdirektori segera /var/log/examplejika mereka terakhir diubah lebih dari 7 hari yang lalu.
Ansgar Wiechers
1

Anda memiliki olddirarahan yang dapat Anda gunakan dalam file konfigurasi.

Dari dokumentasi:

olddir
Log dipindahkan ke direktori untuk rotasi. Direktori harus pada perangkat fisik yang sama dengan file log diputar, dan diasumsikan relatif terhadap direktori yang menyimpan file log kecuali nama path absolut ditentukan. Ketika opsi ini digunakan, semua versi lama log berakhir di direktori. Opsi ini mungkin ditimpa oleh noolddiropsi.

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

Eugen Bogdanovich
sumber