Respostas:
#!/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 "&", pois isso pode causar um problema.
cp
e mv
posso remover o arquivo de log, ele criará um novo arquivo de log com o mesmo nome? (Meu requisito é que, se o arquivo de log atingir um determinado limite, desejo remover esse arquivo de log e criar um novo arquivo )
>>
para anexar ao arquivo de log, >
sobrescrevendo-o repetidamente.
>
, estou recebendo tail: test.log: file truncated Hello World!
.... Se eu estiver usando >>
, estou recebendo uma mensagem de log correta, mas o tamanho do arquivo está aumentando. Nenhuma condição verificando a condição ... ;-(
que tal usar savelog
?
Está disponível no debian e RH e praticamente todas as outras distribuições Linux que eu conheço. É um script de shell / bin / sh, portanto deve ser executado em qualquer outro unix também.
por exemplo, antes de escrever qualquer coisa para test.log
executar savelog -n -c 7 test.log
. Isso manterá as 7 versões não vazias mais recentes do test.log. Por padrão, ele comprime os logs rotacionados (mas que podem ser desativados -l
).
Se necessário, você pode verificar o tamanho test.log
e somente savelog
se estiver acima de um determinado tamanho.
/usr/bin/savelog
shell script em sources.debian.net/src/debianutils/4.7
savelog
em nenhuma das minhas caixas RHEL / CentOS 5/6, então acabei de fazer o download ad hoc e parece funcionar muito bem para minhas necessidades.
savelog
é que ele renomeia o arquivo, mas leva muito tempo para compactar os antigos antes de terminar. Enquanto isso, o log .0 já recebe entradas nos próximos dias. Idealmente, o tempo entre a rotação do log e a sinalização do processo para reabri-lo deve ser mínimo. Desativei savelog
o recurso de compactação por causa disso.
Eu escrevi um logrotee neste fim de semana. Provavelmente não saberia se tivesse lido a ótima resposta domultilog
@ JdeBP .
Eu me concentrei em ser leve e poder 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.
Como ainda não consigo adicionar comentários à resposta aceita , uma dica do BusyBox , onde du
não tem um -b
sinalizador:
du /var/log/file | tr -s '\t' ' ' | cut -d' ' -f1