como implementar logrotate no shell script

10

test.sh

#!/bin/bash
echo "Hello World"

test2.sh

#!/bin/bash
while true
do
    sh test.sh >> /script_logs/test.log &
done

Eu quero implementar logrotate para controlar o tamanho do arquivo de log, então como implementar o logrotate, se a situação é como acima?

    
por Veerendra 23.09.2015 / 08:36

3 respostas

10
#!/bin/bash 
touch /script_logs/test.log
MaxFileSize=2048
while true
do
     sh test.sh >> /script_logs/test.log
#Get size in bytes** 
    file_size='du -b /script_logs/test.log | tr -s '\t' ' ' | cut -d' ' -f1'
    if [ $file_size -gt $MaxFileSize ];then   
        timestamp='date +%s'
        mv /script_logs/test.log /script_logs/test.log.$timestamp
        touch /script_logs/test.log
    fi

done

Eu removi o "&" como isso pode causar um problema.

    
por 23.09.2015 / 09:04
18

que tal usar savelog ?

Ele está disponível em Debian e RH e praticamente todas as outras distribuições Linux que eu conheço. É um script de shell / bin / sh, então deve ser executado em qualquer outro unix também.

por exemplo. antes de escrever qualquer coisa para test.log run savelog -n -c 7 test.log . Isso manterá as 7 versões não vazias mais recentes do test.log. Por padrão, ele comprimirá os logs girados (mas isso pode ser desativado com -l ).

Se precisar, você pode verificar o tamanho de test.log e somente savelog se ele estiver acima de um determinado tamanho.

    
por 23.09.2015 / 08:53
2

Eu escrevi um logrotee neste final de semana. Eu provavelmente não o faria se eu tivesse lido a grande resposta do @JdeBP sobre multilog .

Eu me concentrei em ser leve e ser capaz de bzip2 seus pedaços de saída como:

verbosecommand | logrotee \
  --compress "bzip2 {}" --compress-suffix .bz2 \
  /var/log/verbosecommand.log

Ainda há muito a ser feito e testado.

    
por 10.07.2017 / 04:54