Tengo un script bash simple que ejecuta una serie de comprobaciones ( ping, nslookup, etc) y luego envía un informe por correo electrónico con la salida de los datos.
Me gustaría que el correo electrónico incluya información sobre cuánto tiempo tardó en ejecutarse el script completo. ¿Hay una manera fácil de recopilar esa información?
fuente

$SECONDS; ¡eso es genial! Para agregar a esto, puede convertir segundos en horas: minutos: segundos con algo comodate -d "1970-01-01 ${SECONDS} sec" +'%k:%M:%S'(verman datepara más opciones de formato).SECONDS=0un script y lo mismo en otro script, ¿interferirán entre sí?START_TIME=$SECONDS; dosomething; ELAPSED_TIME=$(($SECONDS - $START_TIME)). Esto parece un poco más flexible para uso simultáneo.Prefije su comando con
/usr/bin/timey el comando time mostrará el tiempo que tardó en ejecutarse el script. Esto es más portátil que usar algobashespecífico.fuente
Mientras usa
SECONDSytimele dará valores relativos. Si desea tener valores absolutos para fines de auditoría e informes sobre cuándo se ejecutó el script y cuándo se completó, es posible que desee probar algo como esto antes y después de sus comandosdate '+%Y%m%d%H%M%S.%N'. Esto también podría darle una mejor granularidad, ya que puede capturar diferencias depingmenos de un segundo, ya que tiene comandos como los que normalmente se ejecutan en un segundo.fuente
Anida tu guión. Para enviar un correo electrónico hay varias opciones. Personalmente, prefiero msmtp para esto, puede definir los encabezados usted mismo al estilo "aquí" (en línea) o usar un archivo separado y juntarlos. Hay todo tipo de alternativas a esto que implican perl, python, etc.
La línea en blanco al final es importante. cat su mensaje ensamblado en msmtp por lo tanto:
Un pesimista recorrería hasta el éxito un número razonable de veces.
La carga útil también podría ser html, y podría generarse php.
Una alternativa muy fea para la operación "por lotes" durante la noche, por ejemplo, es crear un cronjob y la salida se envía por correo electrónico en lugar de stdout / stderr.
fuente