#!/usr/bin/env bash # Run loop at specific interval set -x # convert 10 seconds to microseconds LOOP_REPEAT_MICROSECONDS=$((10*1000000)) while :;do START_MICROS=${EPOCHREALTIME/./} RANDOMSLEEP=${RANDOM} while [ $RANDOMSLEEP -gt 11 ];do RANDOMSLEEP=$((RANDOMSLEEP/3)) done sleep $RANDOMSLEEP ELAPSED_MICROS=$((${EPOCHREALTIME/./}-START_MICROS)) if [ $ELAPSED_MICROS -ge $LOOP_REPEAT_MICROSECONDS ];then echo "Loop exceeded interval, no time to sleep!" continue else SLEEP_TIME_MICROS=$((LOOP_REPEAT_MICROSECONDS-ELAPSED_MICROS)) SLEEP_TIME_SECONDS=$(bc -l <<< "scale=2;$SLEEP_TIME_MICROS / 1000000") sleep "$SLEEP_TIME_SECONDS" fi done