Ok; After running that a few days, it works fine, but... the interval between updates is all over the place.
I rewrote it, to only change the sleep value under 2 circumstances: First time run, or after a failure. Now it's updating hourly again. I will not make the same mistake of posting it to the list, because archiving a possibly buggy script that someone may copy someday is not a great idea. However I think the methodology is now sound, so write your own or mail me directly if you want a copy of it to adopt. On Fri, Jun 01, 2012 at 04:45:24PM +1000, David Diggles wrote: > > #!/bin/sh > > remaining=$1;shift > > cmd=$@ > > lock=/var/run/$(basename $1).lock > > [ -f $lock ] || { > > touch $lock > > while [ $remaining -gt 0 ]; do > > seconds=$(($RANDOM % $remaining)) > > echo $(date) $seconds >> $lock > > sleep $seconds > > $cmd && return || remaining=$(($remaining - $seconds)) > > done > > rm $lock > > } > > > > *groan*.. another mistake.. I'm such an idiot sometimes ;-) > > I don't recommend running this without checking it first. > > #!/bin/sh > remaining=$1;shift > cmd=$@ > lock=/var/run/$(basename $1).lock > [ -f $lock ] || { > touch $lock > while [ $remaining -gt 0 ]; do > seconds=$(($RANDOM % $remaining)) > echo $(date) $seconds >> $lock > sleep $seconds > $cmd && break || remaining=$(($remaining - $seconds)) > done > rm $lock > }