30 votes

Comment faire en sorte que cron exécute quelque chose toutes les "N" ème minutes, où n% 5 == 1?

Je sais que je peux faire exécuter quelque chose toutes les cinq minutes en cron avec une ligne comme:

  */5 * * * * /my/script
 

Et si je ne veux pas qu'il fonctionne à 12:00, 12:05, 12:10, mais plutôt à 12:01, 12:06, 12:11, etc.? Je suppose que je peux le faire:

  1,6,11,16,21,26,31,36,41,46,51,56 * * * * /my/script
 

... mais c'est moche. Existe-t-il une manière plus élégante de le faire?

56voto

David Z Points 49476
 1-56/5 * * * * /my/script
 

Cela devrait fonctionner sur vixiecron, je ne suis pas sûr des autres implémentations.

15voto

Sean Bright Points 39480

Utiliser votre calendrier:

*/5 * * * * /my/script

Et d'ajouter ceci au début de votre script:

sleep 60

(Oui, c'est une blague)

-1voto

Ludvig A Norin Points 2094

J'avais créer un nouveau script "delaystart" qui prend la période de sommeil comme premier paramètre et le script à exécuter que le reste. Je ferais le script vérifie la crontab de ligne pour la ligne avec le script et lancez le script si la ligne n'est pas commenté. Qui le rend réutilisable, et le ps de ne pas signaler le script en cours d'exécution quand il ne l'est pas vraiment.

#!/bin/bash
sleeptime=$1
sleep ${sleeptime}
shift
if ( ! crontab -l | grep -e '#.+delaystart '${sleeptime} $* ) then
  $*
fi

-5voto

dacracot Points 8567

sean.bright blague m'a fait réfléchir... pourquoi ne pas l'utiliser...

* * * * * /my/script

...et dans le script de ce faire...

#!/bin/bash
export WHEN=`date '+%M'`
echo $WHEN
export DOIT=`echo "$WHEN % 5" | bc` 
echo $DOIT
if [ $DOIT != 0 ] ; then
    echo "ha ha ha"
fi
echo "done"

...une bidouille... peut-être, mais aussi laid que le crontab... je ne sais pas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X