Eu tenho um script simples que executa uma série de verificações ( ping
, nslookup
, etc) e, em seguida, envia um relatório de e-mail com a saída desses dados.
Gostaria que o email incluísse informações sobre quanto tempo o script inteiro levou para ser executado. Existe uma maneira fácil de coletar essas informações?
fonte
$SECONDS
; isso é ótimo! Para adicionar isso, você pode converter segundos em horas: minutos: segundos com algo parecidodate -d "1970-01-01 ${SECONDS} sec" +'%k:%M:%S'
(vejaman date
para mais opções de formatação).SECONDS=0
um script e a mesma coisa em outro script, eles interferirão um no outro?START_TIME=$SECONDS; dosomething; ELAPSED_TIME=$(($SECONDS - $START_TIME))
. Isso parece um pouco mais flexível para uso simultâneo.Prefixe seu comando
/usr/bin/time
e o comando time exibirá o tempo que levou o script para ser executado. Isso é mais portátil do que usar algobash
específico.fonte
Enquanto estiver usando
SECONDS
etime
fornecerá valores relativos. Se você deseja ter valores absolutos para fins de auditoria e relatório, quando o script foi executado e quando foi concluído, tente algo assim antes e depois dos comandosdate '+%Y%m%d%H%M%S.%N'
. Isso também pode fornecer uma granularidade melhor, pois pode capturar diferenças de segundos que você tem, como comandosping
que normalmente são executados em um segundo.fonte
Aninhe seu script. Para enviar um email, há várias opções. Pessoalmente, sou a favor do msmtp, é possível definir os cabeçalhos no estilo "aqui" (em linha) ou usar um arquivo separado e agrupá-los. Existem todos os tipos de alternativas para isso envolvendo perl, python etc.
A linha em branco à direita é importante. coloque sua mensagem montada no msmtp assim:
Um pessimista repetiria até o sucesso um número razoável de vezes.
A carga útil também pode ser html e pode ser gerada por php.
Uma alternativa muito feia para a operação "em lotes" da noite para o dia é criar um cronjob e a saída é enviada por email em vez de stdout / stderr.
fonte