¿Cuál es la mejor manera de realizar una comparación de marca de hora en Bash?

StackOverflow https://stackoverflow.com/questions/205666

  •  03-07-2019
  •  | 
  •  

Pregunta

Tengo un script de alerta que trato de evitar que me envíen correos no deseados, por lo que me gustaría establecer una condición para que, si se ha enviado una alerta dentro de, digamos la última hora, para no enviar otra alerta. Ahora tengo un trabajo cron que revisa la condición cada minuto porque necesito que me avisen rápidamente cuando se cumpla la condición, pero no necesito recibir el correo electrónico cada munite hasta que tenga el problema bajo control. ¿Cuál es la mejor manera de comparar el tiempo en bash para lograr esto?

¿Fue útil?

Solución

Por mucho, lo más fácil es almacenar sellos de tiempo como tiempos de modificación de archivos ficticios. Los comandos GNU touch y date pueden establecer / obtener estos horarios y realizar cálculos de fecha. Bash tiene pruebas para verificar si un archivo es más reciente que ( -nt ) o más antiguo que ( -ot ) otro.

Por ejemplo, para enviar una notificación solo si la última notificación fue hace más de una hora:

touch -d '-1 hour' limit
if [ limit -nt last_notification ]; then
    #send notification...
    touch last_notification
fi

Otros consejos

Utilice " prueba " ;:

if test file1 -nt file2; then
   # file1 is newer than file2
fi

EDITAR: si desea saber cuándo ocurrió un evento, puede usar " toque " para crear un archivo que pueda comparar más tarde utilizando " prueba " ;.

Use el comando de fecha para convertir los dos tiempos en un formato estándar y restarlos. Probablemente querrá almacenar el tiempo de ejecución anterior en un archivo de puntos y luego hacer algo como:

last = cat /tmp/.lastrun
curr = date '+%s'

diff = $(($curr - $last))
if [ $diff -gt 3600 ]; then
    # ...
fi

echo "$curr" >/tmp/.lastrun

(Gracias, Steve.)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top