Ajuda com script

1. Ajuda com script

Matheus Britto
aimagem

(usa Slackware)

Enviado em 16/01/2013 - 07:11h

Pessoal,

Fiz um script para gerar relatórios de algumas atividades específicas que acontecem no meu servidor de arquivos. O arquivo principal se chama report.log - que contém tudo que acontece de forma concatenada - e outro chamado report_anomêsdia.log - que contém apenas o que acontece durante o dia e é criado um novo a cada dia (report_`date +%Y%m%d`.log). Tenho que separar do relatório diário, partes baseado em alguns critérios, o que consegui fazer com o script abaixo de forma bem simples e rápida.


#!/bin/bash

report="/private/var/log/pms"
log="report_`date +%Y%m%d`.log"

cat $report/$log | while read line
do
photo="${line%_*_*}"
photo="${photo##*_}"
echo $line | grep $photo >> $report/$photo.log
done


Até ai tudo super bem. O problema aconteceu quando acrescentei a parte de envio de mail - como descrito baixo - antes do done.


file=`ls -1 $report/$photo.log | wc -m`
if [ $file -eq 20 ]
then
`mail -s "Subject" mail.server.ext < $report/$photo.log`
elif [ $file -eq 19 ]
then
`mail -s "Subject" mail.server.ext < $report/$photo.log`
.
.
.
fi


Ao invés de ser enviado apenas uma única mensagem com o conteúdo do arquivo gerado, chegam várias mensagem com os pedaços do arquivo. O motivo disso acontecer é bem óbvio, já que está dentro do loop. O problema é como solucionar. §;-)
Usei o wc -m porque cada arquivo gerado pelo script tem nome diferente e já testei e cada um tem uma contagem distinta, mas se tiver outra forma de fazer isso - e que funcione tão bem quanto - estou aberto à sugestões.

Alguém poderia indicar um caminho para fazer o que preciso?

Agradeço desde já.

Abraços,

Matheus.


  


2. Re: Ajuda com script

Luís Fernando C. Cavalheiro
lcavalheiro

(usa Slackware)

Enviado em 16/01/2013 - 09:21h

Faz o script criar o arquivo normalmente sem enviá-lo por e-mail e apenas ao final dele acrescente mais um if-then-else-fi contendo os parâmetros para decidir se ele envia o arquivo ou não.


3. Re: Ajuda com script

Matheus Britto
Aimagem

(usa Slackware)

Enviado em 16/01/2013 - 16:41h

lcavalheiro,

Mas ai é que está o problema. Fora do loop ele apresenta erros, por não identificar o $photo.log. §:-(


4. Re: Ajuda com script

Luís Fernando C. Cavalheiro
lcavalheiro

(usa Slackware)

Enviado em 16/01/2013 - 23:28h

Aimagem escreveu:

lcavalheiro,

Mas ai é que está o problema. Fora do loop ele apresenta erros, por não identificar o $photo.log. §:-(


Usa o loop para compor um arquivo qualquer com os dados que seriam enviados por e-mail, e após o loop envie o arquivo.


5. Re: Ajuda com script

Paulo
paulo1205

(usa Ubuntu)

Enviado em 17/01/2013 - 01:01h

Aimagem escreveu:

lcavalheiro,

Mas ai é que está o problema. Fora do loop ele apresenta erros, por não identificar o $photo.log. §:-(


No tópico que você criou anteriormente eu expliquei exatamente como você deveria fazer para não ter tal tipo de problema.


6. Re: Ajuda com script

Matheus Britto
Aimagem

(usa Slackware)

Enviado em 17/01/2013 - 03:00h

paulo1205 escreveu:

No tópico que você criou anteriormente eu expliquei exatamente como você deveria fazer para não ter tal tipo de problema.


Paulo,

Não havia me lembrado disso. Obrigado pela dica.
O problema agora é que a checagem do tamanho dos arquivos parou de funcionar. O comando wc -m está contando todos os arquivos juntos e não separados para poder comparar. Alguma idéia de como solucionar isso? Tem horas que a cabeça dá um nó…

Abraços,

Matheus.


7. Re: Ajuda com script

Matheus Britto
Aimagem

(usa Slackware)

Enviado em 17/01/2013 - 03:05h

lcavalheiro escreveu:

Usa o loop para compor um arquivo qualquer com os dados que seriam enviados por e-mail, e após o loop envie o arquivo.


lcarvalho,

Mas o script já gera os arquivos necessários. O que preciso é checar se cada arquivo tem um tamanho certo de caracteres no nome e dependendo do tamanho, enviar para um determinado mail. O comando estava funcionando super bem, agora parou de funcionar e contar o total de caracteres de todos os arquivos. Alguma idéia de como solucionar isso?

Abraços,

Matheus.


8. Re: Ajuda com script

Matheus Britto
Aimagem

(usa Slackware)

Enviado em 17/01/2013 - 03:07h

Atualizando…


logdir="/private/var/log"
logfile="$logdir/report_`date +%Y%m%d`.log"

if [ -e $logfile ]
then
    exec 3< <(cat $logfile)
    while read file <&3
    do
        name="${file%_*_*}"
        name="${name##*_}"
        echo $file | grep $name >> $logdir/$name.log
    done
    exec 3<&-
fi


Funcionando perfeitamente bem para gerar os arquivos que preciso - antes também estava funcionando, mas o Paulo me lembrou de corrigir uma pequena falha…
Agora uma coisa estranha que anda acontecendo é que se der um echo $name ele me mostra apenas o último arquivo criado e não todos os que foram criados. Porque isso está acontecendo e como resolvo isso?
Tem como direcionar a informação da criação do arquivo para um variável qualquer para que depois possa fazer a comparação para saber para onde o arquivo será enviado? Tipo: se criar um arquivo chamado recife.log, enviar para um email, se for sampa.log para outro mail?






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts