[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RES: [shell-script] Calcular Hora
From: |
Rodolfo Villanova |
Subject: |
RES: [shell-script] Calcular Hora |
Date: |
Tue, 28 Sep 2004 12:13:29 -0300 |
Acho que o que o Linko quer é um script que faça cálculos de diferenças
entre horários.
Existem diversas formas de fazer o que o Linko deseja.
Eu elaborei uma solução para me avisar quando há atraso na chegada de um
determinado arquivo, estabelecido um intervalo de tolerância.
Aí vai minha pequena contribuição para o software livre.
Recortei o que me parece essencial para publicá-lo na lista, e ele pode ser
melhorado.
Não fiz testes da versão que coloquei abaixo, mas a versão integral funciona
bem, executado de hora em hora pela cron de ambientes Unix SunOs e True64.
Se necessário, com algumas adaptações, deve funcionar também em ambiente
Linux.
#!/bin/ksh
##################################################
# Monitora chegada de arquivo
##################################################
# Define o intervalo em minutos de tolerância no atraso de recebimento do
arquivo desejado
INTERVALO=180
HOJE_DIA=`date +%d`
HOJE_MES=`date +%m`
HOJE_ANO=`date +%Y`
HOJE_AMD=`date +%Y%m%d`
HOJE_HORA=`date +%H`
HOJE_MIN=`date +%m`
ARQ_LOG=/var/logs/ARQUIVO_$HOJE_AMD.log
DIRETORIO=/diretorio/qualquer
####################
correio ()
{
echo "O último arquivo foi recebido às <$HH_ARQ> do dia <$DD_ARQ $MES_ARQ
$HOJE_ANO>" >> $ARQ_LOG
mailx -s "Atraso no recebimento de arquivo address@hidden <
$ARQ_LOG
}
####################
# Main
####################
# Obtem a hora e minuto de criação do + recente arquivo no diretório
MES_ARQ=`ls -ltr $DIRETORIO | tail -1 | tr -s " " " " | cut -d" " -f6`
DD_ARQ=`ls -ltr $DIRETORIO | tail -1 | tr -s " " " " | cut -d" " -f7`
HH_ARQ=`ls -ltr $DIRETORIO | tail -1 | tr -s " " " " | cut -d" " -f8`
HORA_ARQ=`echo $HH_ARQ | cut -d":" -f1`
MIN_ARQ=` echo $HH_ARQ | cut -d":" -f2`
if [ $HORA_ARQ -eq $HOJE_ANO ]; then
echo "*** Não foi possível calcular atraso - arquivo mostrou o ano
($HORA_ARQ) ao invés do horário ***"
exit
fi
# Verifica se o último arquivo foi recebido há mais tempo que o estabelecido
no INTERVALO
if [ $HOJE_HORA -eq $HORA_ARQ ]; then
exit
elif [ $HOJE_HORA -eq 0 ]; then
DIF_HORA=`expr 23 - $HORA_ARQ`
DIF_MIN=`expr 60 - $MIN_ARQ`
if [ `expr $DIF_HORA \* 60 + $DIF_MIN + $HOJE_MIN` -gt $INTERVALO ];
then
correio
fi
elif [ $HOJE_HORA -gt $HORA_ARQ ]; then
DIF_HORA=`expr $HOJE_HORA - $HORA_ARQ - 1`
DIF_MIN=`expr 60 - $MIN_ARQ`
if [ `expr $DIF_HORA \* 60 + $DIF_MIN + $HOJE_MIN` -gt $INTERVALO ];
then
correio
fi
else
correio # com certeza, qualquer intervalo pré-estabelecido será bem
menor que 24 horas
fi
#### Zé Finit ####
Buenas, Linko.
Esse script proporcionou um bom exercício pros neurônios encontrar a solução
que eu precisava.
Cabe a ti, agora, encontrar uma outra que melhor se adeque ao que desejas
obter.
Abraço e boa sorte,
-----------------------
Rodolfo Gross Villanova
> -----Mensagem original-----
> De: Tiago F Bianchini [mailto:address@hidden]
> Enviada em: terça-feira, 28 de setembro de 2004 11:37
> Para: address@hidden
> Assunto: Re: [shell-script] Calcular Hora
>
> nao sei se te ajuda, se ha como aplicar na tua necessidade, mas o comando
> "time" te da o tempo decorrido pra executar determinado comando
> (ou script)
>
> exemplo:
> time ls
>
>
> Em Ter 28 Set 2004 11:28, linko_k escreveu:
> > Bom Dia,
> >
> > Gostaria de saber como eu faço para clacular hora, exemplo:
> >
> > - um processo começou as 13:59 e terminou as 17:39, como eu faço o
> > calculo para saber o tempo que durou este processo ?
> >
> > - outro exemplo: começou as 23:14 e terminou as 03:48
> >
> >
> >
> > Obrigado,
> > Linko