Ho registri nel seguente formato: AAAAMMGG
Voglio comprimere i vecchi registri (più vecchi di quelli attuali) e magari spostarli in una directory diversa in seguito.
Posso farlo in logrotate o devo usare uno script personalizzato in cron?
Ho registri nel seguente formato: AAAAMMGG
Voglio comprimere i vecchi registri (più vecchi di quelli attuali) e magari spostarli in una directory diversa in seguito.
Posso farlo in logrotate o devo usare uno script personalizzato in cron?
Risposte:
Ecco uno script rapido che farà ciò di cui hai bisogno:
#!/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
Rendi eseguibile lo script:
$ chmod +x /where/you/put/this/script
La voce crontab sarà simile a:
30 0 * * * /where/you/put/this/script
Basta regolare LOGDIR
e OLDLOGDIR
. Alle 12:30 sposta tutti i registri nel formato AAAAMMGG per i giorni precedenti (e precedenti, se presenti).
nodateext
, olddir
, compress
, e daily
le opzioni.
logrotate può farlo con olddir se il nome del file di registro è lo stesso ogni volta che viene eseguito e puoi aggiungere date. Se il nome del tuo file di registro cambia, ad esempio AAAAMMGG, logrotate non lo farà per te.
# sample logrotate conf file
copytruncate
compress
dateformat %Y%m%d.
dateext
extension log
olddir ./logarchive
/logs/sys.log {
rotate 7
daily
}
Copia e gzips /logs/sys.log in /logs/logarchive/sys.20120101.log.gz, conserva registri per una settimana.