Você quer logrotate link .
Provavelmente já está no seu sistema. Você só precisa configurá-lo. No entanto, é principalmente para o propósito de remover arquivos de log antigos e não sei se você pode configurá-lo para manter um arquivo.
O que você pode fazer
crie vários diretórios log
, log.weekly
, log.monthly
e log.yearly
log
sendo onde todos os arquivos de log vão. Crie
- uma tarefa cron semanal que copia o arquivo de log mais recente de
log
paralog.weekly
, - uma tarefa cron mensal que copia o arquivo de log mais recente de
log
paralog.monthly
e - uma tarefa cron anual que copia o arquivo de log mais recente de
log
paralog.yearly
.
Configure logrotate apropriadamente para os diferentes diretórios.
#!/bin/bash
NOW=$(date +%
ls -rt1 ${LOG} | while read FILE
do
TVAL=$(stat --printf %W ${LOG}/${FILE})
if [ $(ls -1 ${LOG.WEEKLY} | wc -l) ] -eq 0 ]
then
cp ${LOG}/${FILE} ${LOG.WEEKLY}/${FILE}
else
LAST_WEEKLY=$(ls -t1 ${LOG.WEEKLY} | head -n 1 | stat --printf %W)
if [ $((${TVAL}-${LAST_WEEKLY})) -gt $((60*60*24*7)) ]
then
cp ${LOG}/${FILE} ${LOG.WEEKLY}/${FILE}
fi
fi
# repeat the above logic for month and year
rm ${LOG}/${FILE}
done