Réponses:
Vous ne pouvez pas planifier le travail toutes les dix secondes, mais je suppose que vous pouvez planifier le travail pour qu'il s'exécute toutes les minutes et dormir en boucle à des intervalles de 10 secondes. Cela dépendrait de l'exécution de votre commande avant l'expiration de l'intervalle de dix secondes, ou vous obtiendrez un chevauchement lors de l'exécution de la prochaine commande. Cela semble être une solution précaire, mais si vous pouvez garantir une exécution très courte de la commande principale du script, cela fonctionnerait.
#!/bin/bash
i=0
while [ $i -lt 6 ]; do
/run/your/command &
sleep 10
i=$(( i + 1 ))
done
J'ai eu une tâche similaire la semaine dernière. Ma solution était de multiplier les entrées cron standard à la fréquence souhaitée. Mon crontab ressemble à:
* * * * * /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 10; /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 20; /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 30; /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 40; /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 50; /usr/local/bin/php /var/www/myscript.php
Si vous voulez vérifier les résultats de myscript.php, par exemple pour le débogage, ajoutez simplement
&> /tmp/myscipt.log
à chaque ligne de la crontab ci-dessus. Ensuite, stderr et stdout sont redirigés vers le fichier journal.
J'utiliserais Monit et définirais le temps de cycle à 10 secondes. C'est une façon propre de gérer cela en dehors du système cron.
Je le fais avec certains scripts qui doivent s'exécuter sur un intervalle de 15 secondes.
Voir: Comment effectuer des sauvegardes incrémentielles / continues du pool zfs?
Si vous voulez passer sous 10 secondes, par exemple 5 secondes, je recommande de faire une boucle de travail avec un petit script comme ça:
#!/bin/bash
INTERVAL=5
while true; do
echo "do something"
# wait for next interval
WAIT_UNTIL=$(($(date +%s) + $INTERVAL))
while [ $(date +%s) -lt $WAIT_UNTIL ]; do
sleep 1
done
done
Si vous devez dépasser la seconde, ajoutez des microsecondes à la commande date.
* * * * * script to run
* * * * * sleep 10; script to run
* * * * * sleep 20; script to run
Ici, le script peut être exécuté avec l'intervalle de 10 secondes ...