Logar erro em um arquivo. [RESOLVIDO]

1. Logar erro em um arquivo. [RESOLVIDO]

Rafael Carvalhido (Dr.Network)
drnetwork

(usa CentOS)

Enviado em 16/11/2012 - 11:07h

Olá a todos e obrigado pelo interesse em ajudar.

Eu tenho um script de backup em que eu gostaria de logar o output do erro no log de backup.

Segue abaixo, uma fração do código e onde minha dúvida reside.

# Inicia o programa
echo "`date +%F_%T` Iniciado o processo de Backup" >> /var/log/backup.log

tar -zpcf /var/backups/backup-"$HOST"_$NEWBACKUP.tar.gz --files-from=$FILE

VARAUX=$?

if [ $VARAUX -eq 0 ]; then # Se teve sucesso ao criar,...
# Diga ao log que criou com sucesso
echo "`date +%F_%T` Criado novo backup chamado /var/backups/backup-"$HOST"_$NEWBACKUP.tar.gz" >> /var/log/backup.log


(...)

else # Caso não tenha tido sucesso na criação do email,...
# Relate no log, e...
echo "`date +%F_%T` Erro na criação do backup-"$HOST"_$NEWBACKUP.tar.gz" >> /var/log/backup.log
# ...Envie um email avisando
/usr/local/bin/email -b -s "Criação do backup em `date +%Y-%m-%d` falhou no $HOST. Favor verificar os logs." $EMAILAVISO
fi


Eu gostaria que em caso de erro no comando Tar, ele não só avisasse que houve um erro, mas também relatasse o erro que deu.

Eu tentei adicionar o verbose no tar e jogar output pro log ( >> /var/log/backup.log), mas isso não vai ser interessante, pois se não der erro ele escreve mais de 1500 linhas (os diretórios e arquivos 'backupeados').

Estou achando que devo utilizar o STDERR de alguma forma, mas não sei como e nem se é possível.

Que opções de solução teríamos aqui?


  


2. MELHOR RESPOSTA

Adriano Moreira da Silva
adri3d

(usa Arch Linux)

Enviado em 16/11/2012 - 17:38h

troque o direcionador de fluxo >, por >>

tipo assim:

tar -zpcf /var/backups/backup-"$HOST"_$NEWBACKUP.tar.gz --files-from=$FILE 2>> /var/log/backup


3. Re: Logar erro em um arquivo. [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 16/11/2012 - 13:23h

As mensagens de erro vão para stderr, que é o file descriptor (fd) 2. Você pode redirecionar o fd 2 fazendo 2>destino, onde destino pode ser um arquivo ou outro fd (usando a sintaxe "&outro_fd").

Se você usar a obção verbose do tar, ele vai imprimir os arquivos em stdout (fd 1), a não ser que a saída do tar seja o próprio stdout ("-" é sinônimo de stdout), quando tal saída irá para stderr (fd 2) juntamente com mensagens de erro. Nesse caso, você ainda pode extrair as mensagens de erro com um grep, pois os erros terão sempre o formato "tar: ..." (a não ser que você esteja pegardo arquivos de um diretório chamado "tar: " (incluindo o espaço em branco após os dois pontos).


4. Re: Logar erro em um arquivo. [RESOLVIDO]

Rafael Carvalhido (Dr.Network)
drnetwork

(usa CentOS)

Enviado em 16/11/2012 - 16:20h

paulo1205 escreveu:

As mensagens de erro vão para stderr, que é o file descriptor (fd) 2. Você pode redirecionar o fd 2 fazendo 2>destino, onde destino pode ser um arquivo ou outro fd (usando a sintaxe "&outro_fd").


Como ficaria, então? assim?

tar -zpcf /var/backups/backup-"$HOST"_$NEWBACKUP.tar.gz --files-from=$FILE 2> /var/log/backup 



5. Re: Logar erro em um arquivo. [RESOLVIDO]

Rafael Carvalhido (Dr.Network)
drnetwork

(usa CentOS)

Enviado em 16/11/2012 - 16:26h

Tentei dessa forma aí, mas... droga! Apagou todo o log. Ele está sobrescrevendo o arquivo /var/log/backup.log ao invés de append. Como faço para que a informção enviada para o log seja escrita no final do arquivo?



6. Re: Logar erro em um arquivo. [RESOLVIDO]

Rafael Carvalhido (Dr.Network)
drnetwork

(usa CentOS)

Enviado em 19/11/2012 - 12:41h

É isso ae, funcionou agora bonito.

Obrigado a todos.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts