while set $time to current time test $time < $expiry fail: break loop test $time - $prevtime >= 10 fail: sleep 10 $prevtime = $time warn $time #### $expiry = 3600 $prevtime = undef $time = undef 1st loop: $time = 123 $time 123 < $expiry 3600 (true) $time 123 - $prevtime undef >= 10 (true) $prevtime = 123 warn $time 123 2nd loop: $time = 123 (first iteration takes less than 1 second) $time 123 < $expiry 3600 (true) $time 123 - $prevtime 123 >= 10 (false) sleep 10 $prevtime = 123 warn $time 123 3rd loop: $time = 133 (slept on last iteration so advance 10s) $time 133 < $expiry 3600 (true) $time 133 - $prevtime 123 >= 10 (true) $prevtime = 133 warn $time 133 4th loop: $time = 133 (last iteration took less than 1s) ...