que - scripts bash ejemplos
Cuál es la mejor forma de realizar la comparación de marca de tiempo en Bash (3)
Tengo una secuencia de comandos de alerta que trato de evitar que me envíen spam, por lo que me gustaría establecer la condición de que si se ha enviado una alerta, por ejemplo, la última hora, para no enviar otra alerta. Ahora tengo un trabajo cron que comprueba la condición cada minuto porque necesito que se lo avise rápidamente cuando se cumple la condición, pero no necesito recibir el correo electrónico de todos los munite hasta que tenga el problema bajo control. ¿Cuál es la mejor manera de comparar el tiempo en bash para lograr esto?
Use "prueba":
if test file1 -nt file2; then
# file1 is newer than file2
fi
EDITAR: si desea saber cuándo ocurrió un evento, puede usar "tocar" para crear un archivo que luego puede comparar usando "prueba".
Use el comando de fecha para convertir las dos veces en un formato estándar y restelas. Es probable que desee almacenar el tiempo de ejecución anterior en un archivo de puntos y luego haga algo como:
last = cat /tmp/.lastrun
curr = date ''+%s''
diff = $(($curr - $last))
if [ $diff -gt 3600 ]; then
# ...
fi
echo "$curr" >/tmp/.lastrun
(Gracias, Steve.)
Por mucho, lo más fácil es almacenar marcas de tiempo como tiempos de modificación de archivos ficticios. Los comandos de touch
y date
GNU pueden establecer / obtener estos tiempos y realizar cálculos de fecha. Bash tiene pruebas para verificar si un archivo es más nuevo que ( -nt
) o anterior a ( -ot
) otro.
Por ejemplo, para enviar solo una notificación 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