Como medir quanto tempo meu script executa e incluir isso em um email gerado?

11

Eu tenho um script bash simples que executa uma série de verificações ( ping , nslookup , etc) e, em seguida, envia um relatório de email com a saída desses dados.

Gostaria que o email incluísse informações sobre quanto tempo demorou todo o script a ser executado. Existe uma maneira fácil de coletar essas informações?

    
por Mike B 07.02.2015 / 02:57

4 respostas

15

Sugiro dar uma olhada em bash variable SECONDS :

SECONDS: Each time this parameter is referenced, the number of seconds since shell invocation is returned. If a value is assigned to SECONDS, the value returned upon subsequent references is the number of seconds since the assignment plus the value assigned.

Assim, você pode simplesmente imprimir essa variável no final do script. Alternativamente, se a sua intenção é medir o tempo de apenas parte do programa, basta definir SECONDS=0 no início do bloco de comandos medido e, no final, usar apenas o valor armazenado nessa variável.

    
por 07.02.2015 / 03:05
8

Prefixe seu comando com /usr/bin/time e o comando time exibirá o tempo que o script levou para ser executado. Isso é mais portátil do que o uso de algo bash específico.

    
por 07.02.2015 / 04:10
6

Ao usar SECONDS e time , você terá valores relativos. Se você gostaria de ter valores absolutos para fins de auditoria e relatório quanto a quando o script foi executado e quando foi concluído, talvez você queira tentar algo assim antes e depois de seus comandos      date '+%Y%m%d%H%M%S.%N' . Isso também pode fornecer uma granularidade melhor, já que ele pode capturar diferenças de sub-segundo, pois você tem comandos como ping , que normalmente são executados em um segundo.

    
por 07.02.2015 / 05:06
1

Aninhe seu script. Para enviar um email, há várias opções. Eu pessoalmente prefiro o msmtp para isso, você pode definir os cabeçalhos "here" style (inline) ou usar um arquivo separado e cat-los juntos. Existem todos os tipos de alternativas para isso envolvendo perl, python, etc.

Reply-To: someone@somehost
Sender: someone <someone@somehost>
To: [email protected]
Subject: some subject
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Type: text/html; charset="iso-8859-1"

A linha em branco à direita é importante. Transforme sua mensagem montada em msmtp assim:

cat assembled.eml | msmtp [email protected]

Um pessimista faria um loop até o sucesso um número razoável de vezes.

A carga útil também pode ser html e pode ser gerada pelo php.

Uma alternativa muito feia para operação "em lote" durante a noite, digamos, é criar um cronjob e a saída é enviada por e-mail em vez de stdout / stderr.

    
por 07.02.2015 / 09:43