Si vous voulez éviter la "dérive", c'est-à-dire que vous voulez que la commande soit exécutée toutes les N secondes, quelle que soit la durée de la commande (en supposant qu'elle prenne moins de N secondes), voici un peu de bash qui répétera une commande toutes les 5 secondes avec une précision d'une seconde (et affichera un avertissement s'il n'arrive pas à suivre) :
PERIOD=5
while [ 1 ]
do
let lastup=`date +%s`
# do command
let diff=`date +%s`-$lastup
if [ "$diff" -lt "$PERIOD" ]
then
sleep $(($PERIOD-$diff))
elif [ "$diff" -gt "$PERIOD" ]
then
echo "Command took longer than iteration period of $PERIOD seconds!"
fi
done
Elle peut encore dériver un peu, car le sommeil n'est précis qu'à une seconde près. Vous pouvez améliorer cette précision en utilisant de manière créative la commande date.