Tenho logs no seguinte formato: AAAAMMDD
Quero compactar logs antigos (mais antigos que o dia atual) e talvez movê-los para um diretório diferente posteriormente.
Posso fazer isso no logrotate ou preciso usar um script personalizado no cron?
Tenho logs no seguinte formato: AAAAMMDD
Quero compactar logs antigos (mais antigos que o dia atual) e talvez movê-los para um diretório diferente posteriormente.
Posso fazer isso no logrotate ou preciso usar um script personalizado no cron?
Respostas:
Aqui está um script rápido que fará o que você precisa:
#!/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
Torne o script executável:
$ chmod +x /where/you/put/this/script
A entrada crontab será semelhante a:
30 0 * * * /where/you/put/this/script
Apenas ajuste LOGDIR
e OLDLOGDIR
. Às 12h30, todos os logs serão movidos no formato AAAAMMDD para os dias anteriores (e anteriores, se houver).
nodateext
, olddir
, compress
, e daily
opções.
logrotate pode fazê-lo com olddir se o nome do arquivo de log for o mesmo sempre que for executado e você poderá adicionar datas. Se o nome do seu arquivo de log for alterado, ou seja, AAAAMMDD, o logrotate não fará isso por você.
# sample logrotate conf file
copytruncate
compress
dateformat %Y%m%d.
dateext
extension log
olddir ./logarchive
/logs/sys.log {
rotate 7
daily
}
Cópias e gzips /logs/sys.log em /logs/logarchive/sys.20120101.log.gz, mantêm uma semana de registros.