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 date
para más opciones de formato).SECONDS=0
un 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/time
y el comando time mostrará el tiempo que tardó en ejecutarse el script. Esto es más portátil que usar algobash
específico.fuente
Mientras usa
SECONDS
ytime
le 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 deping
menos 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