Bisakah saya menggunakan logrotate untuk mengompresi log harian (nama tanggal)?

8

Saya memiliki log dalam format berikut: YYYYMMDD

Saya ingin mengompresi log lama (lebih tua dari hari ini) dan mungkin memindahkannya ke direktori yang berbeda sesudahnya.

Bisakah saya melakukan ini di logrotate, atau apakah saya harus menggunakan skrip khusus di cron?

Šimon Tóth
sumber

Jawaban:

4

Berikut skrip quickie yang akan melakukan apa yang Anda butuhkan:

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

Jadikan skrip dapat dieksekusi:

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

Entri crontab akan terlihat seperti:

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

Cukup sesuaikan LOGDIRdan OLDLOGDIR. Pada pukul 12:30 pagi, itu akan memindahkan semua log dalam format YYYYMMDD untuk hari-hari sebelumnya (dan sebelumnya, jika ada).

unpythonic
sumber
4
Ya, tetapi itu tidak benar-benar menjawab pertanyaan saya. Pertanyaan saya adalah apakah saya bisa menggunakan logrotate untuk ini.
Šimon Tóth
@Let_Me_Be - Saya pikir itu tersirat dalam jawaban saya. Tidak, logrotate tidak akan melakukan apa yang Anda inginkan. Artinya, Anda tidak bisa hanya mencocokkan file YYYYMMDD. Jika tidak, Anda dapat datang dekat dengan menggunakan nodateext, olddir, compress, dan dailypilihan.
unpythonic
3

logrotate dapat melakukannya dengan olddir jika nama file log Anda sama setiap kali berjalan dan Anda dapat menambahkan tanggal. Jika nama file log Anda berubah yaitu YYYYMMDD maka logrotate tidak akan melakukannya untuk Anda.

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

/logs/sys.log {
    rotate 7
    daily
}

Salinan dan gzips /logs/sys.log ke /logs/logarchive/sys.20120101.log.gz, simpan log selama satu minggu.

jason
sumber
1
Ini bukan jawabannya. Log sudah memiliki datestamps, dan secara efektif diputar, Let_Me_Be hanya ingin mengompresnya. Saya yakin @jmtd benar.
andrew lorien
2

logrotateitu sendiri tidak melakukan ini. Saya akan merekomendasikan untuk menulis skrip tambahan dan memohonnya agar tidak logrotatemenggunakan postrotateopsi dalam konfigurasi.

jmtd
sumber